Another fixlet that helps with jircii. 2006-08-13 Roman Kennke <[EMAIL PROTECTED]>
* javax/swing/JTabbedPane.java (JTabbedPane): Call setModel() here and let this install the change listener correctly. (setModel): Correctly uninstall and reinstall ChangeListener when model changes. /Roman
Index: javax/swing/JTabbedPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JTabbedPane.java,v retrieving revision 1.43 diff -u -1 -2 -r1.43 JTabbedPane.java --- javax/swing/JTabbedPane.java 26 Jul 2006 14:45:33 -0000 1.43 +++ javax/swing/JTabbedPane.java 13 Aug 2006 01:12:59 -0000 @@ -751,29 +751,25 @@ */ public JTabbedPane(int tabPlacement, int tabLayoutPolicy) { if (tabPlacement != TOP && tabPlacement != BOTTOM && tabPlacement != RIGHT && tabPlacement != LEFT) throw new IllegalArgumentException("tabPlacement is not valid."); if (tabLayoutPolicy != SCROLL_TAB_LAYOUT && tabLayoutPolicy != WRAP_TAB_LAYOUT) throw new IllegalArgumentException("tabLayoutPolicy is not valid."); this.tabPlacement = tabPlacement; layoutPolicy = tabLayoutPolicy; - changeEvent = new ChangeEvent(this); - changeListener = createChangeListener(); - - model = new DefaultSingleSelectionModel(); - model.addChangeListener(changeListener); + setModel(new DefaultSingleSelectionModel()); updateUI(); } /** * This method returns the UI used to display the JTabbedPane. * * @return The UI used to display the JTabbedPane. */ public TabbedPaneUI getUI() { return (TabbedPaneUI) ui; @@ -868,34 +864,42 @@ * This method returns the model used with the JTabbedPane. * * @return The JTabbedPane's model. */ public SingleSelectionModel getModel() { return model; } /** * This method changes the model property of the JTabbedPane. * - * @param model The new model to use with the JTabbedPane. + * @param m The new model to use with the JTabbedPane. */ - public void setModel(SingleSelectionModel model) + public void setModel(SingleSelectionModel m) { - if (model != this.model) + if (m != model) { SingleSelectionModel oldModel = this.model; - this.model.removeChangeListener(changeListener); - this.model = model; - this.model.addChangeListener(changeListener); + if (oldModel != null && changeListener != null) + oldModel.removeChangeListener(changeListener); + + model = m; + + if (model != null) + { + if (changeListener != null) + changeListener = createChangeListener(); + model.addChangeListener(changeListener); + } firePropertyChange("model", oldModel, this.model); } } /** * This method returns the tabPlacement. * * @return The tabPlacement used with the JTabbedPane. */ public int getTabPlacement() { return tabPlacement;