SWT: Textfeld mit Hilfe von Combo Box füllen

Hallo

Erstens: ich würde die Textfelder lieber mit setEditable(false) sperren, da man dann - im Gegensatz zu setEnabled(false) - noch reinklicken und die Inhalte kopieren kann (sofern man das erlauben möchte, dass jemand zum Beispiel die Artikelnummer rauskopiert).

Zweitens zu deiner Frage:
Ich sehe keinen Grund, warum dir ein normaler AuswahlListener nicht helfen sollte.

Java:
// auf die Auswahl von ComboBox-Elementen (Artikeln) reagieren
modell.addSelectionListener(new SelectionAdapter() {
     @Override
     public void widgetSelected(final SelectionEvent event) {
          // ausgewaehlten Artikel entsprechend ComboBox-Auswahl holen
          final Artikel selected = produktkatalog[modell.getSelectionIndex()];
          // Artikelnummer uebernehmen
          artikelNr.setText(Integer.toString(selected.getArtikelnr()));
          // Name der Artikelfarbe anzeigen
          farbe.setText(selected.getFarbe());
          // Artikelfarbe darstellen
          farbBeispiel.setBackground(farben.get(selected.getFarbe()));
          // und so weiter
      }
});

Da du ja die ComboBox genau in der Reihenfolge befüllst in der die Artikel in deinem produktkatalog-Array liegen, kannst du die Position in der ComboBox einfach übertragen.
Vorzugsweise solltest du vielleicht deinen Produktkatalog alphabetisch nach den Bezeichnungen sortieren (vor dem Befüllen der ComboBox natürlich), sofern diese nicht schon in der korrekten Sortierung irgendwo herkommen (z.B. deine Datenbank?).

Sollten die Artikel unsortiert bei dir ankommen, kannst du soetwas machen:
Java:
Arrays.sort(produktkatalog, new Comparator<Artikel>() {
    // vergleiche zwei Artikel miteinander
    public int compare(Artikel artikelEins, Artikel artikelZwei) {
        // vergleiche anhand des enthaltenen Bezeichnungstextes
        return artikelEins.getBezeichnung().compareTo(artikelZwei.getBezeichnung());
    }
});


Ich hoffe es hilft :)

Schönes Wochenende,
Carron
 
Hey Sonnenschein,

nicht aufgeben ;)
Woran haperts denn noch? Ohne konkrete Hinweise kann dir schlecht geholfen werden.
Ins Blaue ratend kann ich nur einen Fehler beschreiben, den ich kürzlich bei einer ComboBox hatte:

Ich habe aus einem anderen Listener heraus einen Eintrag in der ComboBox mittels select() ausgewählt und danach meine Methode aufgerufen, die auch in meinem SelectionListener ausgeführt wurde, da der nicht durch select() aktiviert wird.
Allerdings war da noch immer der alte Eintrag ausgewählt, weil er sich im Thread verhaspelt hat.
Erst der folgende Zwang zur Thread-Einheitlichkeit hat's dann bei mir gelöst:

Java:
final int index = 5;
getDisplay().asyncExec(new Runnable() {
    public void run() {
        comboBox.select(index);
        // und dann der Inhalt meines SelectionListeners
        comboEntrySelected();
    }
});

Darüber hinaus wüsste ich nicht, wie ich dir helfen kann...


Grüße
Carron
 
Also wenn ich den SelectionListener so einbaue, dann bekomme ich folgende Fehlermeldungen:

produktkatalog[modell.getSelectionIndex()]
Meldung:
The type of the expression must be an array type but it resolved to ArrayList<Moebel>

ToString (bei Farbe)
--> Farbe ist ein String Attribut
Meldung:
The method toString(int) in the type Integer is not applicable for the arguments (String)
Wenn ichs richtig versteh, brauch ich Farbe als Int Attribut... aber mag ich ja als String haben, heißt es dann nicht ToString sondern anderst?

Java:
			private void comboEntrySelected() {
				modell.addSelectionListener(new SelectionAdapter() {
		            public void widgetSelected(final SelectionEvent event) {
		                 // ausgewaehlten Artikel entsprechend ComboBox-Auswahl holen
		                 final Artikel selected = produktkatalog[modell.getSelectionIndex()];
		                 // Artikelnummer uebernehmen
		                 artikelNr.setText(Integer.toString(selected.getArtikelnr()));
		                 // Name der Artikelfarbe anzeigen
		                 farbe.setText(Integer.toString(selected.getFarbe()));
		               
		             }
		       });

Hast du ne Idee was ich falschgemacht hab?
 
Zuletzt bearbeitet:
ich hatte angenommen, dass dein produktkatalog als Array vorliegt und nicht als ArrayList.

Da dem aber so ist sollte dieser SelectionListener es nun tun:

Java:
// auf die Auswahl von ComboBox-Elementen (Artikeln) reagieren
modell.addSelectionListener(new SelectionAdapter() {
     @Override
     public void widgetSelected(final SelectionEvent event) {
          // ausgewaehlten Artikel entsprechend ComboBox-Auswahl holen
          final Moebel selected = produktkatalog.get(modell.getSelectionIndex());
          // Artikelnummer uebernehmen
          artikelNr.setText(Integer.toString(selected.getArtikelnr()));
          // Name der Artikelfarbe anzeigen
          farbe.setText(selected.getFarbe());
      }
});

In diesem Fall gehe ich davon aus, dass produktkatalog vom Typ ArrayList<Moebel> ist und
Moebel.getFarbe() einen String liefert.


Gruß
Carron
 
Zurück