Swing ComboBox ein SelectedItem übergeben/anzeigen

Michoel

Aktives Mitglied
Hi Forum,
stehe grad voll auf dem Schlauch.



Ich habe einen ComboRenderer, der mit von einem User den Vor- und Nachnamen in einer Combobox anzeigt:


Code:
public class ComboRenderer extends JLabel implements ListCellRenderer {


    /**
     * Constructor.
     */
    public ComboRenderer() {
        setOpaque(true);
    }

    /**
     * {@inheritDoc}
     */
    public final Component getListCellRendererComponent(final JList list,
            final Object value, final int index, final boolean isSelected,
            final boolean cellHasFocus) {

        if (isSelected) {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        } else {
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }

        String text = "";

        if (value instanceof User) {
            User user = (User) value;
            text = user.getFirstname()+" "+user.getLastname();
        }

        setText(text);

        return this;
    }
}


In einer View habe ich folgende Bestandteile:


Code:
private javax.swing.JComboBox comboboxPM;
comboboxPM = new javax.swing.JComboBox()

ComboRenderer comboRenderer = new ComboRenderer();
comboboxPM.setName("comboboxPM");

int i=0;
Object[] hu=new Object[users.size()];
comboboxPM.setRenderer(comboRenderer);

while (i<users.size()) {
            comboboxPM.addItem( (Object)users.elementAt(i));
            i++;
}
;



In der Variable users, sind in einem Vector alle User, die ich in ein Object[] hu lege und der ComboBox übergebe. Es werden alle Namen angezeigt, optimal.


Vom Controller oder sonst wo, kann ich auch problemlos die User-ID holen (da ich ja das ganze Object herkriege, die in der Combobox angeklickt wurde mit:


public String getProjectmanager() {
User tmp=(User)comboboxPM.getSelectedItem();
String userID=""+tmp.getUserid();
return userID;
}



Nun, stehe ich voll auf dem Schlauch, wie ich eine Methode schreiben kann, wo ich von außen ein User-Object oder sonst was übergebe/setze, was in der Combobox selected sein soll, also schon markiert.
Oder ich schreibe die Set-Methode so, dass er vom Vector wo alle User drin sind, alle User nochmal lädt, was ich ihm übergebe, aber dann muss er ja auch irgendwie ein User davon zeigen/selecten. Genau das, was ich selectet haben will. Durchzählen kann ich irgendwie nicht, da die User-Ids nicht von 1 anfangend und dann fortlaufend sind, da Lücken drin sind.

???:L
 

Michael...

Top Contributor
Die JComboBox kennt zwei Methoden setSelectedIndex(int) und setSelectedItem(Object). Diese Methoden setzen voraus, dass man entweder den Index des zu selektierenden Objekts kennt oder eine Referenz auf das zu selektierende Objekt besitzt.
Wenn Du jetzt z.B. nur die UserID des Objekts kennst, musst Du selbst herausfinden, um welches User Objekt es sich handelt bzw. auf welcher Position im Model es sich befindet. Sowas könnte man z.B. im Controler machen, oder man verwendet ein eigenes Model z.B. abgeleitet von DefaultComboBoxModel, dem man eine zusätzliche Methode setSelectedID spendiert.
 

Michoel

Aktives Mitglied
Hi,

ie JComboBox kennt zwei Methoden setSelectedIndex(int) und setSelectedItem(Object). Diese Methoden setzen voraus, dass man entweder den Index des zu selektierenden Objekts kennt oder eine Referenz auf das zu selektierende Objekt besitzt.

das erstere mit setSelectedIndex würde nicht gehen, da ich den Index nicht kenne.
Der Controller kann der Combobox alle User wieder übergeben, die er anzeigen soll in einem Vector, wie es oben geschieht. Die Combobox zeigt dann nach dem Schema ComboboxRenderer das ganze an.
Ein bestimmtes soll er nun markieren von den ganzen. Da kann ich ihm nicht nur eine UserID eines Users geben, sondern könnte ihm ein ganzes User-Object geben, das welches er markieren soll.


Also Vector <User> (alle Benutzer) kriegt die Combobox, wo er alle User von dem Vector anzeigt. Ich könnte aber für die Combobox einen einzelnen User noch bilden, den er speziell anzeigen soll.

Da weiß ich leider weiterhin nicht, wie ich das umsetze.
Das mit dem DefaultComboBoxModel habe ich nicht ganz verstanden, versuche ich aber die nächsten Minuten zu verstehen. Wenn es klappt, melde ich mich, ansonsten stehe ich weiterhin auf dem Schlauch.

Grüße und nochmals vielen vielen Dank
 

Michoel

Aktives Mitglied
hi,
oki, ich habe den Fehler gefunden.


ich übergebe ja der Combobox einen Vector mit Usern (Eine Methode getAllUser gibt mir einen Vector mit allen Benutzern zurück), die er anzeigt.
Und wenn ich nun speziell von einem User ein Object bilde und das der Combobox übergebe (setSelectedItem(Object s)) dann zeigte er das nicht an.

Ich muss praktisch von dem Vector, genau den speziellen User herauspicken und ihm sagen, dass er das anzeigen soll. Dann gings :) (Womöglich wegen den Refenrenzen ne)

Ich dachte anfangs eventuell, dass man im ComboRenderer eventuell was prüfen könnte. Wie dem auch sei, hauptsache es geht jetzt.

Vielen Dank Michael :toll:
 

Michael...

Top Contributor
Wenn das neue Objekt im Sinne von equals gleich ist mit einem Objekt aus dem Datenmodell, musst Du die Referenz auf das "Original" nicht kennen.

Ich nehme mal an Du hast in Deiner Klasse User die equals Methode nicht überschrieben, deshalb hat es mit der ersten Vorgehensweise nicht geklappt.
 

Michoel

Aktives Mitglied
Hi, ah, stimmt, man könnte ja mit equals prüfen, ob es gleich ist.

Obwohl die Combobox funktioniert würde mich aber ds equal interessieren (Lerneffekt)

Ich würde praktisch im User eine Methode equels schreiben, die alle Instanten ds USer-Objekts mit dem übergebenen Projekt überprüft.
Wo würde ich dann im die equals-Methode einsetzen. Im der Klasse ComboboxRenderer?

Grüße
 

Michael...

Top Contributor
equals wird z.B. vom Model Deiner ComboBox verwendet, Du selbst musst es garnicht einsetzen. Allerdings sollte man, wenn man equals überschreibt auch die Methode hashCode überschreiben.

Im folgenden Bsp. wird die Gleichheit nur anhand der ID geprüft. Dies führt dazu, dass mittels eines neuen Objekts den zweiten Eintrag der Liste selektieren kann (erkennt man, wenn man die ComboBox aufklappt) mir aber ein falscher Name (der gar nicht in der Liste enthalten ist) angezeigt wird
Java:
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class ComboObject extends JFrame {
	
	public ComboObject() {
		JComboBox combo = new JComboBox(new Object[] {
				new MyObject(1, "Alfred"),
				new MyObject(2, "Horst"),
				new MyObject(3, "Elke"),
		});
		this.getContentPane().add(combo);
		combo.setSelectedItem(new MyObject(2, "Wilfried"));
	}
	
	class MyObject {
		private int id;
		private String text;
		
		public MyObject(int id, String text) {
			this.id = id;
			this.text = text;
		}
		
		public String toString() {
			return id + ": " + text;
		}
		
		public boolean equals(Object o) {
			if (o !=null && o instanceof MyObject) {
				MyObject mo = (MyObject)o;
				return mo.id == this.id;
			}
			return false;
		}
		
		public int hashCode() {
			return id;
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new ComboObject();
		frame.setBounds(0, 0, 500, 200);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F ComboBox selectedItem setzen AWT, Swing, JavaFX & SWT 10
W Element aus comboBox mit observableList löschen AWT, Swing, JavaFX & SWT 3
T Combobox mit Autocomplete-Funktion AWT, Swing, JavaFX & SWT 7
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
Doppel JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
P JavaFX ClassCastException bei ComboBox.getValue AWT, Swing, JavaFX & SWT 4
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
L JavaFX Wiederspenstige ComboBox AWT, Swing, JavaFX & SWT 0
P Combobox und Enum AWT, Swing, JavaFX & SWT 3
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
offi Combobox in TableCell AWT, Swing, JavaFX & SWT 1
D Javafx Combobox Abfrage aus mysql AWT, Swing, JavaFX & SWT 8
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
L ComboBox: slider positionieren AWT, Swing, JavaFX & SWT 0
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
M JavaFX Combobox bindBidirectional AWT, Swing, JavaFX & SWT 4
D [Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox AWT, Swing, JavaFX & SWT 3
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
M JavaFX ComboBox AWT, Swing, JavaFX & SWT 5
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
J ComboBox als Filter benutzen AWT, Swing, JavaFX & SWT 1
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
G Dynamische ComboBox AWT, Swing, JavaFX & SWT 3
U Combobox mit individuellen Texten AWT, Swing, JavaFX & SWT 5
M JavaFX Combobox - Item Auswahl mit Tasten AWT, Swing, JavaFX & SWT 8
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
C Beschriftungen von Tabellenspalten mit Combobox aussuchen AWT, Swing, JavaFX & SWT 2
G JavaFX ComboBox .getItems().add() Problem AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
W Swing Combobox Abhängigkeit AWT, Swing, JavaFX & SWT 1
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
A Swing GUI mit ComboBox, wenn Item ausgewählt wurde neues GUI AWT, Swing, JavaFX & SWT 7
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
J Swing Drive-ComboBox AWT, Swing, JavaFX & SWT 7
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
L Swing Model für ComboBox AWT, Swing, JavaFX & SWT 14
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
T Java Combobox Problem AWT, Swing, JavaFX & SWT 3
C SWT Combobox mit Textdatei füllen AWT, Swing, JavaFX & SWT 2
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
R Datenbanktabellen in Combobox AWT, Swing, JavaFX & SWT 3
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
1 CellEditor mit ComboBox richtig beenden AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
E Swing CellEditor mit Combobox durch Tastatureingabe editieren?! AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
T Daten mittels ComboBox in ein JTable adden AWT, Swing, JavaFX & SWT 7
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
P Swing ComboBox(en) in JTable auslesen und ausgeben AWT, Swing, JavaFX & SWT 11
M Index von Combobox AWT, Swing, JavaFX & SWT 20
L ComboBox in Action AWT, Swing, JavaFX & SWT 4
D ComboBox & CellListRenderer AWT, Swing, JavaFX & SWT 6
D ComboBox-Model mit Observer AWT, Swing, JavaFX & SWT 3
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
T ComboBox auslesen AWT, Swing, JavaFX & SWT 11
P Combobox liesst falschen Wert AWT, Swing, JavaFX & SWT 10
C Combobox im JFrame aus Datenbank befüllen AWT, Swing, JavaFX & SWT 6
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
J Combobox als Filterkriterium (Gruppierung) in JTable AWT, Swing, JavaFX & SWT 7
R Swing ComboBox und doppelter Event!? AWT, Swing, JavaFX & SWT 10
M SWT Wie Textfeld hinzufügen, nach Auswahl von einem bestimmten Combobox-item? AWT, Swing, JavaFX & SWT 3
M SWT ComboBox mit DB-Inhalten Designfrage AWT, Swing, JavaFX & SWT 5
W MouseListener im editable ComboBox AWT, Swing, JavaFX & SWT 14
W Combobox mit eingabefeld AWT, Swing, JavaFX & SWT 7
T Editable ComboBox / kein Weiterspringen AWT, Swing, JavaFX & SWT 12
M Combobox in JTable AWT, Swing, JavaFX & SWT 4
S Swing ComboBox aus Array befüllen AWT, Swing, JavaFX & SWT 2
K Per ComboBox Dateien einlesen AWT, Swing, JavaFX & SWT 23
0 Hintergundfarbe von editierbarer ComboBox ändern AWT, Swing, JavaFX & SWT 2
M Frage zu ComboBox AWT, Swing, JavaFX & SWT 7
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
A NetBeans und ComboBox AWT, Swing, JavaFX & SWT 2
SuperSeppel13 Combobox zur Farbwahl kollidiert mit NimbusLookAndFeel AWT, Swing, JavaFX & SWT 7
D ComboBox(Model) mit dummyItem AWT, Swing, JavaFX & SWT 10
D Inhalt von Textfield nach ComboBox AWT, Swing, JavaFX & SWT 2
GilbertGrape nochmal editierbare Combobox AWT, Swing, JavaFX & SWT 3
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
E Swing Button ActionListener Infos aus Textfield und ComboBox AWT, Swing, JavaFX & SWT 3
G ComboBox wird nicht angezeigt beim anhängen an eine Gruppe AWT, Swing, JavaFX & SWT 2
G Combobox Event AWT, Swing, JavaFX & SWT 4
G ComboBox aktualisieren AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben