Utiliser comboBox.getSelectedItem() dans un stateChanged event
Bonjour,
Je deviens un habitué ces temps ci du forum swing :) A croire que cela faisait une décénie que je n'ai pas touché à cette techno
Voila mon nouveau problème :
j'ai un JTabbedPane dans mon application avec plusieurs onglets, une combobox ou il y'a des éléments. Je veux gérer le changement d'onglets par l'utilisateur pour effectuer des traitements : pour cela, il me faut connaitre la valeur qui est sélectionner dans mon combobox. J'ai écrit la fonction stateChanged de JtabbedPane comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
String productName=PrincipleWindow.products_comboBox.getSelectedItem().toString();
System.out.println(PrincipleWindow.tabbedPane.getSelectedComponent().getName());
Properties prop4 = new Properties();
try {
prop4.load(new FileInputStream("config/products.properties"));
} catch (Exception e1) {
e1.printStackTrace();
}
try {
DBUtils.PopulateJComboFromDB(PrincipleWindow.column1, prop4.getProperty(productName),PrincipleWindow.tabbedPane.getSelectedComponent().getName(), "", env);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} |
J'ai cette erreur quand je lance mon programme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
java.lang.NullPointerException
at com.treso.ca.view.Listener.stateChanged(Listener.java:370)
at javax.swing.JTabbedPane.fireStateChanged(Unknown Source)
at javax.swing.JTabbedPane$ModelListener.stateChanged(Unknown Source)
at javax.swing.DefaultSingleSelectionModel.fireStateChanged(Unknown Source)
at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(Unknown Source)
at javax.swing.JTabbedPane.setSelectedIndexImpl(Unknown Source)
at javax.swing.JTabbedPane.setSelectedIndex(Unknown Source)
at javax.swing.JTabbedPane.insertTab(Unknown Source)
at javax.swing.JTabbedPane.addTab(Unknown Source)
at com.treso.ca.view.PrincipleWindow.initialize(PrincipleWindow.java:233)
at com.treso.ca.view.PrincipleWindow.<init>(PrincipleWindow.java:103)
at com.treso.ca.view.PrincipleWindow$1.run(PrincipleWindow.java:89)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source) |
J'ai remarquer aussi que si je modifie ma fonction comme suit :
Code:
1 2 3 4 5 6 7
|
public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
System.out.println(PrincipleWindow.tabbedPane.getSelectedComponent().getName());
} |
J'ai le nom de mon onglet qui s'affiche dès que je run mon application : or que logiquement il n'y a pas eu de statechange ! la méthode est directement déclancher quand je run mon appli ( ce qui est trop déranant) : car si je met du code la dedans, vu que tout les variables ne sont pas encore setter, ça va forcément cracher.
Y'a t'il un moyen pour contourner le problème ?
Merci d'avance de votre aide :)