Java 数组被覆盖

标签 java arrays jpanel jtextfield

嘿,我是新来的,如果我在帖子中搞砸了,我深表歉意。无论如何,我遇到的问题必须处理数组,我想做的基本上是使用 String[] 数组来填充我的表单并将其显示在屏幕上,然后让 getForm() 函数返回一个 String[],其中包含表单的标题和 text[i] 中的信息。这一切都很好,直到我使用我添加的按钮来调用 getForm() 函数并且我更改为不同的形式(createForm() 附加到 ListListener)和所有标签显示为 getForm() 函数中返回的内容。我很确定这与我使用数组的方式有关,但我认为在我选择另一个通过 createForm() 函数的列表项后它们会恢复正常再次重置阵列,所以我不确定发生了什么。

谢谢

我在下面也附上了我所指内容的屏幕截图。

http://www.majhost.com/gallery/adc90/afsd/error.png

class Form extends JPanel
{
    //Arrays for the forms
    private String[] com = {"Communication","ICAO","Type","Frequency"};
    private String[] fuel = {"Fuel","ICAO","Type"};
    private String[] runway = {"Runway","ICAO","Number","Type","Length"};
    private String[] airplane = {"Airplane","Make","Model","Type","Fuel Capacity", "Fuel Burn Rate", "Air Speed"};
    private String[] airport = {"Airplane","ICAO","Name","Longitude","Latitude","crFreq","crType", "Fuel Type"};

    //Declare variables
    private JTextField[] text;
    private String[] formReturn;
    private String[] formArray;
    private JButton submit,clear;

    public Form()
    {
        createForm("Airplane");
    }

    public void createForm(String choice)
    {
        removeAll();
        if(choice.equals("Communication"))
        {
            formArray = com;
        }
        else if(choice.equals("Fuel"))
        {
            formArray = fuel;
        }
        else if(choice.equals("Airplane"))
        {
            formArray = airplane;
        }
        else if(choice.equals("Airport"))
        {
            formArray = airport;
        }
        else if(choice.equals("Runway"))
        {
            formArray = runway;
        }


        int l = formArray.length + 1;
        text = new JTextField[l];

        //Layout info
        GridLayout grid = new GridLayout(l,2);
        grid.setHgap(0);
        setLayout(grid);
        //Set label
        add(new JLabel(formArray[0]));
        add(new JLabel(""));
        for(int i = 1; i < formArray.length; ++i)
        {
            add(new JLabel(formArray[i]));
            add(text[i] = new JTextField(20));
        }

        //Add in the buttons and the actionlisteners
        submit = new JButton("Create");
        clear = new JButton("Delete");
        add(clear);
            clear.addActionListener(new Button());
        add(submit);
            submit.addActionListener(new Button());
        updateUI();
    }
    //Get form info
    //This works so far
    public String[] getForm()
    {
        formReturn = formArray;
        formReturn[0] = formArray[0];
        for(int i = 1; i < formReturn.length; i++)
            formReturn[i] = text[i].getText();
        return formReturn;
    }
    //Clear form
    public void clearForm()
    {
        for(int i = 1; i < formArray.length; i++)
            text[i].setText("");
    }
}

最佳答案

public String[] getForm()
{
    formReturn = formArray; /* (0) */
    formReturn[0] = formArray[0];
    for(int i = 1; i < formReturn.length; i++)
        formReturn[i] = text[i].getText(); /* (1) */
    return formReturn;
}

请看第 (1) 行:您修改指向标签文本的 formReturn 数组。 formReturn -> formArray -> com.

要修复它,只需在 (0) 处创建新的字符串数组:

formReturn = new String[formArray.length];

关于Java 数组被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370027/

相关文章:

java - 带 catch 的类型非法开始

c - 使用 Lex 替换文本文件中句号后的第一个字符

javascript - 组合具有相同值的对象数组中的对象

Java Swing - 按钮不改变宽度大小

java - 单击 JTable 单元格应将表单显示到容器中

java - 将并行数组复制到新的并行数组而不重复

java - 此版本的ChromeDriver仅支持Chrome版本99当前浏览器版本为98.0.4758.102

c - 从函数返回字符数组打印垃圾值但在函数中打印正常?

java - 在 JPanel 中显示 JPanel 数组

java - 可以在支持 bean 中设置 Html 数据表列宽