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;

Reply via email to