Java - 将 JTextField 和 JLabel 数组添加到 JPanel



我希望这是一个简单的问题。 我有一个 JComboBox,可以选择 0、1、2、3,...10. 根据在 JComboBox 中选择的数字,我希望我的 GUI 添加一个 JLabel 和一个 JTextField。 因此,如果选择数字 3,GUI 应添加 3 个 JLabel 和 3 个 JTextFields。等等。

我正在使用 JLabel 和 JTextFields 数组来完成此操作,但我在运行时收到空指针异常,并且没有添加标签或字段。

法典:

private void createComponents()
{
    //Create Action Listeners
    ActionListener comboListener = new ComboListener();
    //Create Components of the GUI
    parseButton = new JButton("Parse Files");
    parseButton.addActionListener(comboListener);
    numberLabel = new JLabel("Number of Files to Parse: ");
    String[] comboStrings = { "","1", "2","3","4","5","6","7","8","9","10" };
    inputBox = new JComboBox(comboStrings);
    inputBox.setSelectedIndex(0);
    fieldPanel = new JPanel();        
    fieldPanel.setLayout(new GridLayout(2,10));
    centerPanel = new JPanel();
    centerPanel.add(numberLabel);
    centerPanel.add(inputBox);      
    totalGUI = new JPanel();
    totalGUI.setLayout(new BorderLayout());
    totalGUI.add(parseButton, BorderLayout.SOUTH);
    totalGUI.add(centerPanel, BorderLayout.CENTER);        
    add(totalGUI);
}

动作侦听器代码:

public void actionPerformed(ActionEvent e)
{          
        JTextField[] fileField = new JTextField[inputBox.getSelectedIndex()];
        JLabel[] fieldLabel = new JLabel[inputBox.getSelectedIndex()];
        for(int i = 0; i < fileField.length; i++)
        {
            fieldLabel[i].setText("File "+i+":");  //NULL POINTER EXCEPTION HERE
            fieldPanel.add(fieldLabel[i]);         //NULL POINTER EXCEPTION HERE
            fieldPanel.add(fileField[i]);
        }
        centerPanel.add(fieldPanel);
        repaint();
        revalidate();
}

感谢MadProgrammer的评论,这个问题得到了回答。

编辑循环以:

for(int i = 0; i < fileField.length; i++)
    {
        fieldLabel[i] = new JLabel();
        fileField[i] = new JTextField();
        fieldLabel[i].setText("File "+i+":");  
        fieldPanel.add(fieldLabel[i]);         
        fieldPanel.add(fileField[i]);
    }

解决了问题。

最新更新