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);
}
}
L'erreur se produit dans le constructeur 'CancerGUI'. Pouvez-vous poster cela s'il vous plaît. – christopher
Pour une meilleure aide plus rapidement, postez un [SSCCE] (http://sscce.org/). –