JTabbedPane.insertTab doesn't care about selected index

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: P5
    • 5.0
    • Affects Version/s: 1.4.0
    • Component/s: client-libs
    • tiger
    • x86
    • windows_nt



      Name: sv35042 Date: 10/18/2002


      FULL PRODUCT VERSION :
      java version "1.4.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
      Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)


      i experienced the same behaviour also under:

      java version "1.3.1_02"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
      Java HotSpot(TM) Client VM (build 1.3.1_02-b02, mixed mode)


      FULL OPERATING SYSTEM VERSION :
      Windows NT Version 4.0

      A DESCRIPTION OF THE PROBLEM :
      I have a JTabbedPane with one Tab that is (of course)
      selected. (getSelectedIndex returns 0) Then I fill in a new
      Tab before that first one using insertTab. Now this new one
      is selected (getSelectedIndex still returns 0) but I did not
      get a ChangeEvent that a different Tab got selected.

      What I was expecting was that the old selected Tab would
      remain selected and the result of getSelectedIndex would be
      updated without firing ChangeEvents.

      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      package at.co.systema.ui.controls.guitests;

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

      public class TabbedPaneInsertBug
      {
          public static void main(String P_params[])
          {
              JFrame frame = new JFrame();
              frame.addWindowListener (new WindowAdapter()
              {
                  public void windowClosing(WindowEvent e) { System.exit(0); }
              });

              final JTabbedPane tp = new JTabbedPane();
              tp.setPreferredSize(new Dimension(200, 150));
              tp.addChangeListener(new ChangeListener()
              {
                  public void stateChanged(ChangeEvent e)
                  {
                      System.out.println("ChangeEvent ... " + tp.getSelectedIndex() +
      " \"" + tp.getTitleAt(tp.getSelectedIndex()) + "\"");
                  }
              });
              frame.getContentPane().add(tp);

              tp.addTab("Tab 3", new JButton("3"));
              tp.insertTab("Tab 1", null, new JButton("1"), null, 0);
              tp.insertTab("Tab 2", null, new JButton("2"), null, 1);
              tp.addTab("Tab 4", new JButton("4"));

              System.out.println("currently selected index: " + tp.getSelectedIndex()
      + " \"" + tp.getTitleAt(tp.getSelectedIndex()) + "\"");

              frame.pack();
              frame.setVisible(true);
          }
      }

      ---------- END SOURCE ----------

      CUSTOMER WORKAROUND :
      Do a setSelectedIndex for the new index of the previously
      selected tab again and find a way to ignore the ChangeEvent
      in this special case.
      (Review ID: 148138)
      ======================================================================

            Assignee:
            Moa Moa (Inactive)
            Reporter:
            Scott Violet (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: