Ich wollte eine String-Liste als Quelle für verschiedene Optionen in jComboBox in Java verwenden. Können Sie sagen, welche Methode verwendenVerwenden Sie String-Liste als Quelle von Combo-Box
Dank
Ich wollte eine String-Liste als Quelle für verschiedene Optionen in jComboBox in Java verwenden. Können Sie sagen, welche Methode verwendenVerwenden Sie String-Liste als Quelle von Combo-Box
Dank
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());
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.
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;
}
}
Hier gibt es keinen Kommentar, drei Upvotes und der Beantworter sagte * "bedenke, das ist ungeprüft und nur ein Beispiel" * ... funktioniert das? – Pureferret
@pureferret Ich vergaß dieses hier, ich werde es versuchen und einen Testfall mit diesem Code zusammenstellen und zu dir zurückkommen ... – edwardsmatt
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
Der einfachste Weg ist:
comboBox.setModel(new DefaultComboBoxModel(list.toArray()));
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.
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.
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 –
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