2010-02-21 3 views

Antwort

1

Hier können Sie Code haben, die Liste zu einem Array tun müssen, alles, was Sie von dem Array von Strings Kombinationsfeld schafft, ist zu transformieren. String 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

Ich möchte die Combo-Box-Liste im laufenden Betrieb auf der Grundlage einer anderen Benutzerauswahl erstellen. Daher muss ich es auf das Kombinationsfeld setzen, da ich im Konstruktor nicht initialisieren kann. Daher habe ich nach einer Methode gesucht, um entweder eine Liste oder ein Array auf die Box –

+0

zu setzen. Also denke ich, dass Sie die DefaultComboBoxModel-Klasse verwenden können, es bietet eine praktische Möglichkeit zum Hinzufügen und Entfernen von Elementen sowie zum Abrufen des ausgewählten Elements. Setzen Sie dieses Modell dann über die setModel-Methode auf JComboBox. – kokosing

3

DefaultComboboxModel Verlängern und ein Verfahren schaffen, das eine Sammlung nimmt und stellt die Elemente aus dieser Sammlung. Legen Sie dieses benutzerdefinierte Modell als Modell Ihrer Combobox fest, indem Sie setModel() verwenden.

6

Siehe unten für meine Antwort ... berücksichtigen Sie dies ist ungeprüft und nur ein Beispiel.

Sie benötigen eine benutzerdefinierte implmentation von ComboBoxModel zu schaffen wie Chandru sagte dann die ComboBoxModel auf JComboBox stellen Sie die setModel()-Methode und fügen Sie Elemente ((CustomComboBoxModel<String>)jComboBox.getModel()).add(listOfThings); So etwas wie dies mit:

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(); 

} 

und dann implementieren die Schnittstelle mit so etwas wie folgt aus:

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

Hier gibt es keinen Kommentar, drei Upvotes und der Beantworter sagte * "bedenke, das ist ungeprüft und nur ein Beispiel" * ... funktioniert das? – Pureferret

+0

@pureferret Ich vergaß dieses hier, ich werde es versuchen und einen Testfall mit diesem Code zusammenstellen und zu dir zurückkommen ... – edwardsmatt

+0

Ich habe es gerade eingeführt, das einzige Rindfleisch, das es zu haben scheint. untypisierte Umwandlung in T 'oder' Objekt schreiben ', denke ich. Ich kann es jetzt nicht finden, da ich es unterdrückt habe. – Pureferret

0

Der einfachste Weg ist:

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

Ich weiß, es ist ein alter Beitrag, aber ich wollte eine kleine Ergänzung zu edwardsmatt DefaultCustomComboBoxModel machen. Vergessen Sie nicht, diesen Konstruktor hinzuzufügen:

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

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

, damit das Modell auch mit einer Liste initialisiert werden kann, z.

myCombo.setModel(new DefaultCustomComboBoxModel(myList)); 

Wenn Sie ((CustomComboBoxModel)myCombo.getModel()).add(myList) Sie explizit das ausgewählte Element festlegen müssen.

0

Sie können es auch tun, wie folgt:

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); 

    } 

Dieses Modell hat drei Spalten und so viele Zeilen wie es in Liste.osobe Liste von Strings sind.