classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] FYI: DefaultComboBoxModel


From: David Gilbert
Subject: [cp-patches] FYI: DefaultComboBoxModel
Date: Fri, 23 Sep 2005 17:27:29 +0000
User-agent: Mozilla Thunderbird 1.0.6 (X11/20050728)

I committed this patch. The changes to DefaultComboBoxModel are backed by a raft of Mauve tests. The change to MetalComboBoxButton protects against a possible NullPointerException:

2005-09-23  David Gilbert  <address@hidden>

        * javax/swing/DefaultComboBoxModel.java
        (DefaultComboBoxModel(Object[])): set selected item,
        (DefaultComboBoxModel(Vector): likewise,
        (addElement): reimplemented,
        (removeElementAt): update selected item,
        (removeAllElements): clear selected item and fire correct event,
        (setSelectedItem): update item always,
        (getElementAt): return null for index out of bounds,
        * javax/swing/plaf/metal/MetalComboBoxButton.java
        (paintComponent): check for null selection.

Regards,

Dave Gilbert
Index: javax/swing/DefaultComboBoxModel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/DefaultComboBoxModel.java,v
retrieving revision 1.10
diff -u -r1.10 DefaultComboBoxModel.java
--- javax/swing/DefaultComboBoxModel.java       27 Jul 2005 12:41:33 -0000      
1.10
+++ javax/swing/DefaultComboBoxModel.java       23 Sep 2005 16:07:41 -0000
@@ -85,6 +85,8 @@
   public DefaultComboBoxModel(Object[] items)
   {
     list = new Vector(Arrays.asList(items));
+    if (list.size() > 0)
+      selectedItem = list.get(0);
   }
 
   /**
@@ -96,6 +98,8 @@
   public DefaultComboBoxModel(Vector vector)
   {
     this.list = vector;
+    if (vector.size() > 0)
+      selectedItem = vector.get(0);
   }
 
   /**
@@ -107,8 +111,17 @@
    */
   public void addElement(Object object)
   {
-    list.add(object);
-    fireIntervalAdded(this, list.size() - 1, list.size());
+    if (list.size() == 0)
+      {
+        list.add(object);
+        selectedItem = object;
+        fireContentsChanged(this, -1, -1);
+      }
+    else
+      {
+        list.add(object);
+        fireIntervalAdded(this, list.size() - 1, list.size() - 1);
+      }
   }
 
   /**
@@ -122,7 +135,17 @@
    */
   public void removeElementAt(int index)
   {
+    int selected = getIndexOf(selectedItem);
     list.remove(index);
+    if (selected == index) // choose a new selected item
+      {
+        if (selected > 0)
+          selectedItem = getElementAt(selected - 1);
+        else 
+          selectedItem = getElementAt(selected);
+            
+          
+      }
     fireIntervalRemoved(this, index, index);
   }
 
@@ -163,9 +186,13 @@
    */
   public void removeAllElements()
   {
-    list.clear();
-    int listSize = getSize();
-    fireIntervalAdded(this, 0, listSize);
+    selectedItem = null;
+    int size = getSize();
+    if (size > 0)
+      {
+        list.clear();
+        fireIntervalRemoved(this, 0, size - 1);
+      }
   }
 
   /**
@@ -191,14 +218,9 @@
    */
   public void setSelectedItem(Object object)
   {
-    
-    // Updates the selected item only if the given object
-    // is null or in the list (this is how the JDK behaves).
-    if(object == null || list.contains(object)) {
-       selectedItem = object;
-       fireContentsChanged(this, -1, -1);
-    }
-       
+    selectedItem = object;
+    if(object == null || list.contains(object)) 
+      fireContentsChanged(this, -1, -1);       
   }
 
   /**
@@ -220,6 +242,8 @@
    */
   public Object getElementAt(int index)
   {
+    if (index < 0 || index >= list.size())
+      return null;
     return list.elementAt(index);
   }
 
Index: javax/swing/plaf/metal/MetalComboBoxButton.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java,v
retrieving revision 1.1
diff -u -r1.1 MetalComboBoxButton.java
--- javax/swing/plaf/metal/MetalComboBoxButton.java     13 Sep 2005 21:36:03 
-0000      1.1
+++ javax/swing/plaf/metal/MetalComboBoxButton.java     23 Sep 2005 16:07:44 
-0000
@@ -209,7 +209,10 @@
       }
     else
       {
-        String text = comboBox.getModel().getSelectedItem().toString();
+        String text = "";
+        Object selected = comboBox.getModel().getSelectedItem();
+        if (selected != null) 
+          text = selected.toString();
         Rectangle bounds = comboBox.getBounds();
         Rectangle innerArea = SwingUtilities.calculateInnerArea(this, null);
         if (comboBox.hasFocus())

reply via email to

[Prev in Thread] Current Thread [Next in Thread]