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)
======================================================================