2013-04-14 8 views
0

GUI에는 동일한 ButtonGroup의 일부인 3 개의 라디오 버튼이 있습니다. 하나의 버튼을 클릭하면 JList가 나타나도록하려고합니다. 내 액션 리스너에서 JLists를 작성했지만 실행하려고하면 NullPointerException이 발생합니다. JList를 액션 리스너 외부에 배치하려고 시도했는데 작동하므로 액션 리스너에 뭔가 잘못되었다고 확신합니다. 원하는대로 GUI에 내 버튼이 나타납니다.JRadioButton을 클릭하면 JLists가 변경됩니다.

이 메인 GUI 클래스 내의 내부 클래스는 다음과 같습니다 여기

Exception in thread "main" java.lang.NullPointerException 
at java.awt.Container.addImpl(Container.java:1086) 
at java.awt.Container.add(Container.java:998) 
at javax.swing.JFrame.addImpl(JFrame.java:562) 
at java.awt.Container.add(Container.java:966) 
at Cancer.gui.CancerGUI.<init>(CancerGUI.java:306) 
at Cancer.run.CancerApp.main(CancerApp.java:19) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 2 seconds) 

는 모든 코드를 실행하는 클래스입니다 : 아래
rbGenCancers = new JRadioButton("genCan"); 
    rbRelCancers = new JRadioButton("relCan"); 
    rbCancers = new JRadioButton("nonC"); 
    ButtonGroup bg = new ButtonGroup(); 
    bg.add(rbGenCancers); 
    bg.add(rbRelCancers); 
    bg.add(rbCancers); 

    JPanel rbButtons = new JPanel(new FlowLayout(3, 2, 2)); 
    rbButtons.add(rbGenCancers); 
    rbButtons.add(rbRelCancers); 
    rbButtons.add(rbCancers); 
    //added to the JFrame correctly through GridBagLayout and GridBagConstraints 

public class RadioButtonListener implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     switch(e.getActionCommand()) { 
      case "genCan": 
       listModel = new DefaultListModel(); 
       for(int i = 0; i < 8; i++) { 
        cancerNames = _controller.selectGeneralCancer(i); 
        listModel.addElement(cancerNames); 
       } 
       cancerList = new JList(listModel); 
       cancerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
       cancerList.setSelectedIndex(-1); 
       cancerList.setVisibleRowCount(3); 
       cancerListScroller = new JScrollPane(cancerList); 
       break; 
      case "relCan": 
       listModel = new DefaultListModel(); 
       for(int i = 0; i < 22; i++) { 
        split = _controller.readCancer(i); 
        cancerNames = split[0]; 
        listModel.addElement(cancerNames); 
       } 
       cancerList = new JList(listModel); 
       cancerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
       cancerList.setSelectedIndex(-1); 
       cancerList.setVisibleRowCount(3); 
       cancerListScroller = new JScrollPane(cancerList); 
       break; 
      case "nonC": 
       listModel = new DefaultListModel(); 
       for(int i = 22; i < 36; i++) { 
        split = _controller.readCancer(i); 
        cancerNames = split[0]; 
        listModel.addElement(cancerNames); 
       } 
       cancerList = new JList(listModel); 
       cancerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
       cancerList.setSelectedIndex(-1); 
       cancerList.setVisibleRowCount(3); 
       cancerListScroller = new JScrollPane(cancerList); 
       break; 
     } 
    } 

} 

가 throw되는 예외입니다. 인쇄물의 19 번 줄은 CancerGUI _gui = new CancerGUI()에 해당합니다. CancerGUI의 306 행은 어디에서 cancerListScroller를 GridBagConstraints를 통해 JFrame에 추가하는지에 해당합니다.

public class CancerApp { 
public static void main(String[] args) { 
    CancerGUI _gui = new CancerGUI(); 
    Disease _disease = new Disease(); 
    CancerController _controller = new CancerController(_disease, _gui); 
    _gui.setController(_controller); 

    CancerApp _app = new CancerApp(); 
    _app.run(_gui); 
} 

public void run(CancerGUI _gui) { 
    _gui.setVisible(true); 
} 
} 
+0

오류는 CancerGUI 생성자에서 발생합니다. 제발 그걸 게시 할 수 있습니까? – christopher

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

0

나는 같은 생각을 가지고있었습니다. 라디오 버튼이 작동하지만 내 리스너가 setModel (listmodel)을 사용하여 새 목록을 설정하지 않는 것 같습니다. 나는 예외를 얻지 못한다. 예외가 발생했을 때 형식이 일치하지 않아서 예외가 발생했습니다. 이것들은 화를 낼 수 있습니다. 나는 메시지가 통과하고 있는지 확인하기 위해 두 번 체크 할 것이지만 반드시해야한다.

else if(ae.getActionCommand().equals("chooseTitle")) 
{ 
    jlst.setModel(lm); 
} 

괜찮 으면 나올 수도 있지만 표시되도록하려면 어떻게해야합니까?

관련 문제