1. /*
  2. * @(#)DefaultComboBoxModel.java 1.19 04/05/05
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing;
  8. import java.beans.*;
  9. import java.util.*;
  10. import java.awt.*;
  11. import java.awt.event.*;
  12. import java.io.Serializable;
  13. import java.io.ObjectOutputStream;
  14. import java.io.ObjectInputStream;
  15. import java.io.IOException;
  16. import javax.swing.event.*;
  17. import javax.swing.plaf.*;
  18. import javax.swing.border.*;
  19. import javax.accessibility.*;
  20. /**
  21. * The default model for combo boxes.
  22. *
  23. * @version 1.19 05/05/04
  24. * @author Arnaud Weber
  25. * @author Tom Santos
  26. */
  27. public class DefaultComboBoxModel extends AbstractListModel implements MutableComboBoxModel, Serializable {
  28. Vector objects;
  29. Object selectedObject;
  30. /**
  31. * Constructs an empty DefaultComboBoxModel object.
  32. */
  33. public DefaultComboBoxModel() {
  34. objects = new Vector();
  35. }
  36. /**
  37. * Constructs a DefaultComboBoxModel object initialized with
  38. * an array of objects.
  39. *
  40. * @param items an array of Object objects
  41. */
  42. public DefaultComboBoxModel(final Object items[]) {
  43. objects = new Vector();
  44. objects.ensureCapacity( items.length );
  45. int i,c;
  46. for ( i=0,c=items.length;i<c;i++ )
  47. objects.addElement(items[i]);
  48. if ( getSize() > 0 ) {
  49. selectedObject = getElementAt( 0 );
  50. }
  51. }
  52. /**
  53. * Constructs a DefaultComboBoxModel object initialized with
  54. * a vector.
  55. *
  56. * @param v a Vector object ...
  57. */
  58. public DefaultComboBoxModel(Vector<?> v) {
  59. objects = v;
  60. if ( getSize() > 0 ) {
  61. selectedObject = getElementAt( 0 );
  62. }
  63. }
  64. // implements javax.swing.ComboBoxModel
  65. /**
  66. * Set the value of the selected item. The selected item may be null.
  67. * <p>
  68. * @param anObject The combo box value or null for no selection.
  69. */
  70. public void setSelectedItem(Object anObject) {
  71. if ((selectedObject != null && !selectedObject.equals( anObject )) ||
  72. selectedObject == null && anObject != null) {
  73. selectedObject = anObject;
  74. fireContentsChanged(this, -1, -1);
  75. }
  76. }
  77. // implements javax.swing.ComboBoxModel
  78. public Object getSelectedItem() {
  79. return selectedObject;
  80. }
  81. // implements javax.swing.ListModel
  82. public int getSize() {
  83. return objects.size();
  84. }
  85. // implements javax.swing.ListModel
  86. public Object getElementAt(int index) {
  87. if ( index >= 0 && index < objects.size() )
  88. return objects.elementAt(index);
  89. else
  90. return null;
  91. }
  92. /**
  93. * Returns the index-position of the specified object in the list.
  94. *
  95. * @param anObject
  96. * @return an int representing the index position, where 0 is
  97. * the first position
  98. */
  99. public int getIndexOf(Object anObject) {
  100. return objects.indexOf(anObject);
  101. }
  102. // implements javax.swing.MutableComboBoxModel
  103. public void addElement(Object anObject) {
  104. objects.addElement(anObject);
  105. fireIntervalAdded(this,objects.size()-1, objects.size()-1);
  106. if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
  107. setSelectedItem( anObject );
  108. }
  109. }
  110. // implements javax.swing.MutableComboBoxModel
  111. public void insertElementAt(Object anObject,int index) {
  112. objects.insertElementAt(anObject,index);
  113. fireIntervalAdded(this, index, index);
  114. }
  115. // implements javax.swing.MutableComboBoxModel
  116. public void removeElementAt(int index) {
  117. if ( getElementAt( index ) == selectedObject ) {
  118. if ( index == 0 ) {
  119. setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) );
  120. }
  121. else {
  122. setSelectedItem( getElementAt( index - 1 ) );
  123. }
  124. }
  125. objects.removeElementAt(index);
  126. fireIntervalRemoved(this, index, index);
  127. }
  128. // implements javax.swing.MutableComboBoxModel
  129. public void removeElement(Object anObject) {
  130. int index = objects.indexOf(anObject);
  131. if ( index != -1 ) {
  132. removeElementAt(index);
  133. }
  134. }
  135. /**
  136. * Empties the list.
  137. */
  138. public void removeAllElements() {
  139. if ( objects.size() > 0 ) {
  140. int firstIndex = 0;
  141. int lastIndex = objects.size() - 1;
  142. objects.removeAllElements();
  143. selectedObject = null;
  144. fireIntervalRemoved(this, firstIndex, lastIndex);
  145. } else {
  146. selectedObject = null;
  147. }
  148. }
  149. }