Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener)

Kelsjb7

Mitglied
Hi, ich habe eine Combobox, wo ich verschiedene Namen anklicken kann, wenn ich mein Programm neu starte, ist es so, dass ich einen Namen auswählen kann und dann erhalte ich einen Inhalt, bei einem textare der drunter liegt.

Wenn ich ganz am Anfang zum Beispiel einen Namen anklicke, erhalte ich meinen textare, mit dem gewünschten Inhalt, wenn ich dann einen anderen Namen anklicke, bleibt der Inhalt von der ersten Auswahl.

Schließe ich und starte ich mein Programm erneut, kann ich einen beliebigen Namen anklicken, erhalte den korrekten Inhalt bei dem jeweiligen Namen, aber bei einer zweiten Auswahl, wird das halt nicht aktuallisiert...

Und ganz am Anfang ist es so, dass ein Name automatisch, warum auch immer, ausgewählt ist, bei dem Wird noch kein Inhalt angezeigt, bis ich selber einen Namen anklicke, weil dann erst mein Itemlistener wahrschienlich ausgeführt wird... Was kann man da mache`n?
 
Beste Antwort
deine combobox braucht wahrscheinlich einen changelistener der den text dem namen entsprechend umändert

der erste name der ausgewählt wird ist eine einstellung der combo box .. .dazu findest du was auf stackoverflow
für die erste auswahl kannst du ja die selbe methode aufrufen die du auch im changelistener brauchen wirst

PS. bin mir nicht sicher ob combo box on action auch auslöst wenn ein neues element asugewählt wird dh es könnte auch mit einem action event gehen vllt
Nein, ItemListener ist schon richtig. Der Actionlistener ist nur sehr bedingt für Comboboxen geeignet.
Z.B. will man im Normalfall ja auch, dass sie reagiert, wenn der Wert per Code gesetzt wird und nicht nur, wenn der Benutzer die Eingabe bestätigt.


Was...
Hier kann ich erst einmal nichts konkretes sagen. Kannst Du den Code zeigen? Dann kann man am ehesten etwas sagen.
Top ist bei sowas auch immer, wenn man ein minimales, ausführbares Beispiel bekommen kann - dann kann man das auch nachvollziehen und kleine Anpassungen testen.
 
deine combobox braucht wahrscheinlich einen changelistener der den text dem namen entsprechend umändert

der erste name der ausgewählt wird ist eine einstellung der combo box .. .dazu findest du was auf stackoverflow
für die erste auswahl kannst du ja die selbe methode aufrufen die du auch im changelistener brauchen wirst

PS. bin mir nicht sicher ob combo box on action auch auslöst wenn ein neues element asugewählt wird dh es könnte auch mit einem action event gehen vllt
 
deine combobox braucht wahrscheinlich einen changelistener der den text dem namen entsprechend umändert

der erste name der ausgewählt wird ist eine einstellung der combo box .. .dazu findest du was auf stackoverflow
für die erste auswahl kannst du ja die selbe methode aufrufen die du auch im changelistener brauchen wirst

PS. bin mir nicht sicher ob combo box on action auch auslöst wenn ein neues element asugewählt wird dh es könnte auch mit einem action event gehen vllt
Nein, ItemListener ist schon richtig. Der Actionlistener ist nur sehr bedingt für Comboboxen geeignet.
Z.B. will man im Normalfall ja auch, dass sie reagiert, wenn der Wert per Code gesetzt wird und nicht nur, wenn der Benutzer die Eingabe bestätigt.


Was "ganz am Anfang" angeht.
Wenn du der Combobox Werte zuweist, wird - sofern du das nicht änderst - sofort der erste gesetzt, allerdings wird jetzt noch kein Event ausgelöst, das ist immer so. Ob das nun gut ist oder schlecht ... das dürfen die Entwickler der ComboBox entscheiden.

Du könntest nun einen Item-Event manuell erzeugen und an die Listener der Box schicken, oder aber einfach den Index setzen.
Java:
  public static void main(String[] args) {
    JComboBox<String> cb = new JComboBox<>();
    cb.addItemListener(e -> {
      if (e.getStateChange() == ItemEvent.SELECTED) {
        System.out.println("Now selected: " + ((JComboBox) e.getSource()).getSelectedItem());
      }
    });
    cb.setModel(new DefaultComboBoxModel<>(new String[]{"A", "B", "C"})); //Kein Event wird
    System.out.println("First after initialization: " + cb.getSelectedItem());
    System.out.println("No event yet");
    //Die zweite dieser 3 Zeilen wird eine Exception auslösen, wenn die Combobox keine Einträge hat. Das wäre also vorsichtshalber zu prüfen.
    cb.setSelectedIndex(-1); //löst einen DESELECT-Event aus, der interessiert uns nicht.
    cb.setSelectedIndex(0);
    cb.setSelectedIndex(-1); //löst einen DESELECTED-Event aus, der oben nicht behandelt wird. Ist das ok so oder muss noch was gemacht werden?
  }
Problem hierbei: null-events werden ausgefiltert, auch wenn man manuell das ausgewählte Element auf null setzt. Da muss man vielleicht noch eingreifen.
Ein kleiner Hack wäre, 1. den SELECTED-Filter rauszuschmeißen und den Listener erst zuzuweisen, nachdem man den Index der Box nach dem Setzen des Modells zum ersten Mal auf -1 gesetzt hat. Besser aber ist, die Bedingungen sauber zu prüfen, wann was passieren soll.
 
Beste Antwort

Zurück
Oben