2010-02-21 19 views

Respuesta

1

Aquí tienes el código que crea cuadro combinado del array de Strings, todo lo que tiene que hacer es transformar su lista a una matriz. Cadena petStrings = ...;

//Create the combo box, select item at index 4. 
//Indices start at 0, so 4 specifies the pig. 
JComboBox petList = new JComboBox(petStrings.toArray()); 
+0

quiero crear la lista de cuadros combinados sobre la marcha en función de alguna otra selección de usuario. Por lo tanto, necesito configurarlo en el cuadro combinado ya que no puedo inicializarlo en el constructor. Por lo tanto, estaba buscando algún método para establecer una lista o una matriz en el cuadro –

+0

Así que creo que puede usar la clase DefaultComboBoxModel, que proporciona una forma conveniente para agregar y eliminar elementos, así como para obtener el elemento seleccionado. Luego configure este modelo en JComboBox a través del método setModel. – kokosing

3

Extender DefaultComboboxModel y crear un método que toma una colección y establece los artículos de esa colección. Establezca este modelo personalizado como el modelo de su combobox usando setModel().

6

Vea a continuación mi respuesta ... tenga en cuenta que esto no ha sido probado y es solo un ejemplo.

Es necesario crear un implmentation costumbre de ComboBoxModel como Chandru dijo, A continuación, establezca la ComboBoxModel en su JComboBox utilizando el método setModel() y añadir elementos utilizando ((CustomComboBoxModel<String>)jComboBox.getModel()).add(listOfThings); Algo como esto:

import java.util.List; 
import javax.swing.ComboBoxModel; 

/** 
* Custom Implementation of {@code ComboBoxModel} to allow adding a list of 
* elements to the list. 
*/ 
public interface CustomComboBoxModel<T> extends ComboBoxModel { 

    void add(List<T> elementsToAdd); 

    List<T> getElements(); 

} 

y luego poner en práctica el interfaz de usar algo como esto:

import java.util.ArrayList; 
import java.util.List; 
import javax.swing.AbstractListModel; 

/** 
* Default Implementation of CustomComboBoxModel - untested. 
*/ 
public class DefaultCustomComboBoxModel<T> extends AbstractListModel implements CustomComboBoxModel<T> { 

    List<T> objects; 
    T selectedObject; 

    /** 
    * Constructs an empty DefaultCustomComboBoxModel object. 
    */ 
    public DefaultCustomComboBoxModel() { 
     objects = new ArrayList<T>(); 
    } 

    /** 
    * Constructs a DefaultCustomComboBoxModel object initialized with 
    * an array of objects. 
    * 
    * @param items an array of Object objects 
    */ 
    public DefaultCustomComboBoxModel(final T items[]) { 
     objects = new ArrayList<T>(); 

     int i, c; 
     for (i = 0, c = items.length; i < c; i++) { 
      objects.add(items[i]); 
     } 

     if (getSize() > 0) { 
      selectedObject = objects.get(0); 
     } 
    } 

    // implements javax.swing.ComboBoxModel 
    /** 
    * Set the value of the selected item. The selected item may be null. 
    * Make sure {@code anObject} is an instance of T otherwise a 
    * ClassCastException will be thrown. 
    * <p> 
    * @param anObject The combo box value or null for no selection. 
    */ 
    @Override 
    public void setSelectedItem(Object anObject) { 
     if ((selectedObject != null && !selectedObject.equals(anObject)) 
       || selectedObject == null && anObject != null) { 
      selectedObject = (T) anObject; 
      fireContentsChanged(this, -1, -1); 
     } 
    } 

    // implements javax.swing.ComboBoxModel 
    @Override 
    public T getSelectedItem() { 
     return selectedObject; 
    } 

    // implements javax.swing.ListModel 
    @Override 
    public int getSize() { 
     return objects.size(); 
    } 

    // implements javax.swing.ListModel 
    @Override 
    public T getElementAt(int index) { 
     if (index >= 0 && index < objects.size()) { 
      return objects.get(index); 
     } else { 
      return null; 
     } 
    } 

    /** 
    * Returns the index-position of the specified object in the list. 
    * 
    * @param anObject 
    * @return an int representing the index position, where 0 is 
    *   the first position 
    */ 
    public int getIndexOf(T anObject) { 
     return objects.indexOf(anObject); 
    } 

    // implements javax.swing.MutableComboBoxModel 
    public void addElement(T anObject) { 
     objects.add(anObject); 
     fireIntervalAdded(this, objects.size() - 1, objects.size() - 1); 
     if (objects.size() == 1 && selectedObject == null && anObject != null) { 
      setSelectedItem(anObject); 
     } 
    } 

    // implements javax.swing.MutableComboBoxModel 
    public void insertElementAt(T anObject, int index) { 
     objects.add(index, anObject); 
     fireIntervalAdded(this, index, index); 
    } 

    // implements javax.swing.MutableComboBoxModel 
    public void removeElementAt(int index) { 
     if (getElementAt(index) == selectedObject) { 
      if (index == 0) { 
       setSelectedItem(getSize() == 1 ? null : getElementAt(index + 1)); 
      } else { 
       setSelectedItem(getElementAt(index - 1)); 
      } 
     } 

     objects.remove(index); 

     fireIntervalRemoved(this, index, index); 
    } 

    // implements javax.swing.MutableComboBoxModel 
    public void removeElement(T anObject) { 
     int index = objects.indexOf(anObject); 
     if (index != -1) { 
      removeElementAt(index); 
     } 
    } 

    /** 
    * Empties the list. 
    */ 
    public void removeAllElements() { 
     if (objects.size() > 0) { 
      int firstIndex = 0; 
      int lastIndex = objects.size() - 1; 
      objects.clear(); 
      selectedObject = null; 
      fireIntervalRemoved(this, firstIndex, lastIndex); 
     } else { 
      selectedObject = null; 
     } 
    } 

    @Override 
    public void add(List<T> elementsToAdd) { 
     objects.addAll(elementsToAdd); 
     fireContentsChanged(this, -1, -1); 

    } 

    @Override 
    public List<T> getElements() { 
     return objects; 
    } 
} 
+0

No hay comentarios aquí, tres upvotes y el que responde dijo * "tenga en cuenta que esto no se ha probado y es simplemente un ejemplo" * ... ¿Funciona esto? – Pureferret

+0

@pureferret Me olvidé de esto, voy a probar un caso de prueba usando este código y me pondré en contacto con usted ... – edwardsmatt

+0

Acabo de implementarlo, la única carne que parece tener con un ' lanzar sin tipo a T 'o' escribir Objeto ', creo. No puedo encontrarlo ahora, ya que lo he suprimido. – Pureferret

0

La forma más sencilla es:

comboBox.setModel(new DefaultComboBoxModel(list.toArray())); 
0

Sé que es una publicación anterior, pero quería hacer una pequeña adición al DefaultCustomComboBoxModel de edwardsmatt. No se olvide de añadir este constructor:

public DefaultCustomComboBoxModel(List<T> list) { 
    objects = list; 

    if (getSize() > 0) { 
     selectedObject = objects.get(0); 
    } 
} 

de manera que el modelo también se puede inicializar con una lista, por ejemplo,

myCombo.setModel(new DefaultCustomComboBoxModel(myList)); 

Si utiliza ((CustomComboBoxModel)myCombo.getModel()).add(myList) tendrá que establecer explícitamente el elemento seleccionado.

0

También puede hacerlo de esta manera:

DefaultTableModel modelTabele = (DefaultTableModel) tblOsobe.getModel(); 
    modelTabele.addColumn("Ime"); 
    modelTabele.addColumn("Prezime"); 
    modelTabele.addColumn("Datum Rodjenja"); 

    for (Osoba osoba : Liste.osobe) { 
     System.out.println("" + osoba); 
     Object[] podaci = new Object[3]; 
     podaci[0] = osoba.getIme(); 
     podaci[1] = osoba.getPrezime(); 
     podaci[2] = osoba.getDatumRodjenja(); 
     modelTabele.addRow(podaci); 

    } 

Este modelo tiene 3 columnas y tantas filas como hay en la lista Liste.osobe de cadenas.

Cuestiones relacionadas