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