I have a jTabbedPane
in my program. When I click on a tab, I need to awake a specific method. I used a switch
statement to invoke each method by catching the StateChange
event. This is my code.
jTabbedPane :
private javax.swing.JTabbedPane jTabbedPane1;
jTabbedPane1 = new javax.swing.JTabbedPane();
jTabbedPane1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jTabbedPane1.setTabPlacement(javax.swing.JTabbedPane.LEFT);
jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jTabbedPane1StateChanged(evt);
}
});
jTabbedPane1.addTab("tab0", jPanel0);
jTabbedPane1.addTab("tab1", jPanel1);
jTabbedPane1.addTab("tab2", jPanel2);
jTabbedPane1.addTab("tab3", jPanel3);
jTabbedPane1.addTab("tab4", jPanel4);
jTabbedPane1.addTab("tab5", jPanel5);
Event Handler:
private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {
switch (jTabbedPane1.getSelectedIndex()) {
case 0:
method0();
case 1:
method1();
case 2:
method2();
case 3:
method3();
case 4:
method4();
case 5:
method5();
}
}
But, when I click on a tab, all methods are called. No error was shown. I'm using JDK 17
.
java 17.0.6 2023-01-17 LTS
Java(TM) SE Runtime Environment (build 17.0.6+9-LTS-190)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.6+9-LTS-190, mixed mode, sharing)
When I use the if
statement instead of the switch
statement, the code is working perfectly.
private void jTabbedPane1StateChanged(javax.swing.event.ChangeEvent evt) {
if (jTabbedPane1.getSelectedIndex() == 0) {
method0();
}
if (jTabbedPane1.getSelectedIndex() == 1) {
method1();
}
if (jTabbedPane1.getSelectedIndex() == 2) {
method2();
}
if (jTabbedPane1.getSelectedIndex() == 3) {
method3();
}
if (jTabbedPane1.getSelectedIndex() == 4) {
method4();
}
if (jTabbedPane1.getSelectedIndex() == 5) {
method5();
}
}
What is the problem there?
You need to add "break" to switc-case definitions. When a switch statemnt matches, you need to prevent other matching checking.
You can use like this:
switch (a) {
case 0:
System.out.println(0);
break;
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
break;
case 4:
System.out.println(4);
break;
case 5:
System.out.println(5);
break;
}