-1

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?

1 Answers1

1

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;
    }
İlkay Gunel
  • 712
  • 2
  • 11
  • 24
  • 1
    Since this question has been tagged with `[java-17]`, the better option is to use the new syntax: `switch(a) { case 0 -> System.out.println(0); case 1 -> System.out.println(1); case 2 -> System.out.println(2); case 3 -> System.out.println(3); case 4 -> System.out.println(4); case 5 -> System.out.println(5); }` Then, you don’t have to remember to put `break` into it. – Holger Jul 03 '23 at 10:35