2017-11-06 22 views
0

나는 이것이 쉬운 질문 이길 바라고 있습니다. 0, 1, 2, 3, ... 10 중 하나를 선택할 수있는 JComboBox가 있습니다. JComboBox에서 선택된 숫자에 따라 GUI에 JLabel과 JTextField를 추가해야합니다. 따라서 숫자 3을 선택하면 GUI는 3 개의 JLabel과 3 개의 JTextField를 추가해야합니다. 기타 등등.Java - JPanel에 JTextField 및 JLabel 배열 추가

이 작업을 위해 JLabels 및 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); 
} 

된 ActionListener 코드 : MadProgrammer의 의견에

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(); 
} 
+0

'fieldLabel'과'fileField'는 요소를 포함하지 않으며, 단지 그들을위한 공간 만 가지고 있습니다. 상호 작용하기 전에 각 요소에 새 값을 할당해야합니다. – MadProgrammer

+1

완벽 함. 추가 : fieldLabel [i] = 새로운 JLabel(); fileField [i] = new JTextField(); FOR 루프에 문제가 해결되었습니다. 빠른 응답을 주셔서 감사합니다 @MadProgrammer – Justiciar

+0

[스택 추적이란 무엇이며 어떻게 응용 프로그램 오류를 디버그 할 수 있습니까?] (http://stackoverflow.com/q/3988788/418556) 및 [Null이란 무엇입니까? 포인터 예외 및 어떻게 해결할 수 있습니까?] (http://stackoverflow.com/q/218384/418556) –

답변

0

덕분에,이 질문은 답변되었습니다.

에 루프 편집 :

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]); 
    } 

문제를 해결.