Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4253819

If you remove ANY JTabbedPane tab except the last one there is NO state change!

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 5.0
    • 1.2.2
    • client-libs
    • tiger
    • generic
    • generic
    • Not verified



      Name: skT88420 Date: 07/13/99


      1. Steps:

      Run this program (code below) and close any tab except
      the tab which is currently the last tab. There will be NO
      changeEvent fired. In my sample code, changeEvents cause a
      BANG followed by a number to be printed on System.out so you can
      easily see which events cause changeEvents and which don't.

      The reason why this happens probably is that the concept of
      a state change must be INCORRECTLY based on which tab
      INDEX is selected, rather than which ACTUAL TAB is selected.
      So there is no changeEvent when you remove a tab which is not
      the last tab since it does NOT cause a selected index change!!!

      2. Source code:

      import java.util.*;
      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;

      public class JTabbedPaneBug extends JFrame {
      public JTabbedPaneBug() {
      super("If you remove ANY TAB except the last tab there is NO state change!");
      setSize(800, 300);
      Container mainContentPane = getContentPane();
      mainContentPane.setLayout(new BorderLayout(0,0));
      mainContentPane.add("Center", pain);
      JButton one = new JButton(REMOVE);
      JButton two = new JButton(REMOVE);
      JButton three = new JButton(REMOVE);
      JButton four = new JButton(REMOVE);
      JButton five = new JButton(REMOVE);
      JButton six = new JButton(REMOVE);
      JButton seven = new JButton(REMOVE);
      one.addActionListener(new Foo());
      two.addActionListener(new Foo());
      three.addActionListener(new Foo());
      four.addActionListener(new Foo());
      five.addActionListener(new Foo());
      six.addActionListener(new Foo());
      seven.addActionListener(new Foo());
      pain.addTab("one", one);
      pain.addTab("two", two);
      pain.addTab("three", three);
      pain.addTab("four", four);
      pain.addTab("five", five);
      pain.addTab("six", six);
      pain.addTab("seven", seven);
      }
      private static String REMOVE = "Click anywhere to remove the panel!";
      PaneAndSuffering pain = new PaneAndSuffering();
      class PaneAndSuffering extends JTabbedPane {
      protected void fireStateChanged() {
      super.fireStateChanged();
      System.out.println("BANG " + bangCount++);
      }
      private int bangCount = 0;
      }
      class Foo implements ActionListener {
      public void actionPerformed(ActionEvent e) {
      pain.removeTabAt(pain.getSelectedIndex());
      //if you can click the button it's the selected index
      }
      }
      public static void main(String[] args) {
      JTabbedPaneBug jtb = new JTabbedPaneBug();
      jtb.setVisible(true);
      }
      }
      (Review ID: 85497)
      ======================================================================

            moasunw Moa Moa (Inactive)
            skonchad Sandeep Konchady
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: