【问题标题】:Java Arrays being overwrittenJava 数组被覆盖
【发布时间】:2012-05-09 08:19:06
【问题描述】:

嘿,我在这里有点新,所以如果我在帖子中搞砸了,我深表歉意。无论如何,我必须处理数组的问题,我要做的基本上是使用 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("");
    }
}

【问题讨论】:

    标签: java arrays jpanel jtextfield


    【解决方案1】:
    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];
    

    【讨论】:

    • 现在效果很好,我不明白我以前怎么没看到过。非常感谢。
    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多