2013-04-14 5 views
0

Dans mon interface graphique, j'ai 3 boutons radio qui font partie du même ButtonGroup. J'essaye de l'obtenir de sorte que quand un bouton est cliqué, un JList apparaîtra. Dans mon écouteur d'action, j'ai mes JLists écrits mais quand j'essaye de l'exécuter, j'obtiens une exception NullPointerException. J'ai essayé de placer le JList en dehors de l'écouteur d'action et cela fonctionne, donc je suis assez sûr qu'il y a quelque chose qui ne va pas avec mon écouteur d'actions. Mes boutons apparaissent dans l'interface graphique comme je le veux.Modifier JListes lorsque vous cliquez sur JRadioButton

Il est une classe interne au sein de la classe principale GUI:

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

} 

est inférieure à la Exception levée:

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) 

Voici la classe qui exécute tout le code. La ligne 19 de la printstack correspond à CancerGUI _gui = new CancerGUI(); La ligne 306 dans CancerGUI correspond à l'endroit où j'ajoute cancerListScroller au JFrame à travers le GridBagConstraints.

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

L'erreur se produit dans le constructeur 'CancerGUI'. Pouvez-vous poster cela s'il vous plaît. – christopher

+0

Pour une meilleure aide plus rapidement, postez un [SSCCE] (http://sscce.org/). –

Répondre

0

J'avais la même pensée. Les boutons radio fonctionnent, mais mon écouteur d'action ne semble pas définir une nouvelle liste avec setModel (listmodel). Je ne reçois pas d'exception. Quand j'ai eu une exception, c'était à cause d'une incompatibilité de type. Ceux-ci peuvent être exaspérants. Je vais vérifier pour m'assurer que le message passe, mais il le devrait.

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

Est-ce que ça fonctionne peut-être bien, mais je dois faire quelque chose pour l'afficher?

Questions connexes