Problem mit SelectionListener

Servus,
ich habe ein Problem mit einem SelectionListener auf einer JList. Sobald sich die Selektion in der Liste ändert, bzw. wenn zum ersten Mal halt was angewählt wurde, soll verschiedene Buttons aktiviert werden.
Leider klappt das noch nicht wie gewünscht. Ich kann auswählen was ich will, der SelectionListener reagiert einfach nicht. Fehlermeldung/Exception kommt keine.

...
//ListModel wird mit Werten (String) gefüllt
fill(aktivListModel,true);
//neue Liste mit Model erstellen
aktivList = new JList(aktivListModel);
aktivList.setSelectionMode(ListSelectionModel.SINGLE\_SELECTION);
aktivList.addListSelectionListener(listen);
...

„listen“ ist eine Instanz einer Klasse, die die GUI-Ereignisse abarbeitet. Wie gesagt ansonsten klappt alles, nur nicht bei der Liste:

...
public void valueChanged(ListSelectionEvent e) {
 if (aktivList.getSelectedIndex() == -1) {
 aktivDelBt.setEnabled(false);
 aktivEditBt.setEnabled(false);
 } else {
 aktivDelBt.setEnabled(true);
 aktivEditBt.setEnabled(true);
 }
}
...

Irgendwie komme ich da gerade nicht weiter.

mfg
Markus

Moin

ich habe ein Problem mit einem SelectionListener auf einer
JList. Sobald sich die Selektion in der Liste ändert, bzw.
wenn zum ersten Mal halt was angewählt wurde, soll
verschiedene Buttons aktiviert werden.

klar.


//ListModel wird mit Werten (String) gefüllt
fill(aktivListModel,true);
//neue Liste mit Model erstellen
aktivList = new JList(aktivListModel);
aktivList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Änder das nächste mal Testweise in :

aktivList.getSelectionModel().addListSelectionListener(listen);

Dann kann man auch auf etwas komplexere Selections listen und brauch an sich das setSelectionMode() nicht mehr.

Das ist falsch:

if (aktivList.getSelectedIndex() == -1) {

Erst NACHDEM alle Listener abgearbeitet wurden wird in der Liste auch tatsächlich der Index als Selected markiert. Man muss also auf die Methoden int getFirstIndex() und int getLastIndex() aus dem Event arbeiten.

cu

Servus,
habe jetzt mal den Code entsprechend abgeändert. Aber irgendwie passiert nichts. Habe mal testweise eine Ausgabe eingefügt:

...
public void valueChanged(ListSelectionEvent e) {
 mainWin.showMessage("Event: "+e.toString());
...

Aber nicht einmal da wird was ausgegeben, was mich darauf schließen läßt, dass das Event gar nicht ausgelöst wird. Also langsam weiss ich nicht mehr…

gruss
Markus

Problem behoben und schon das nächste
Hy,
das erste Problem habe ich nun in den Griff bekomen und nun stehe ich vor dem nächsten.
Ich habe 2 verschiedene Listen und möchte dementsprechend die dazugehörigen Buttons (de)aktivieren. Wie komme ich jetzt aber an die Namen der Liste heran, in der eine Selektion getätigt wurde.

Bei Buttons o.a. kann ich ja einfach über

...
if(event.getSource() == buttonSoUndSo)...

den gedrückten Button abfragen. Wie geht das bei einer JList funkt

...
if(event.getSource() == list1)...

irgendwie nicht.

Und alle Beispiele und Codes die ich bis jetzt ergoogelt haben, behandeln immer nur eine JList.

mfg
Markus

Moin

Bei Buttons o.a. kann ich ja einfach über


if(event.getSource() == buttonSoUndSo)…

den gedrückten
Button abfragen. Wie geht das bei einer JList funkt


if(event.getSource() == list1)…

irgendwie nicht.

Was passiert wenn du auf die ListModeles oder die SelectionModels testets ? (Lass dir mal die Klasse vom Object „event.getSource()“ ausgeben)

cu

Hallo Markus,

public void valueChanged(ListSelectionEvent e) {
mainWin.showMessage("Event: "+e.toString());

Aber nicht einmal da wird was ausgegeben, was mich darauf
schließen läßt, dass das Event gar nicht ausgelöst wird. Also
langsam weiss ich nicht mehr…

Wenn nicht mal der Text „Event:“ ausgegeben wird, dann kommt es nicht zum auswerten des Event in dieser Methode! Ergo: Der Listener ist nicht korrekt angemeldet. Dort muss du die Suche ansetzen.

MfG.
Marc

Genau das war der Fehler
Da habe ich mir die hirnrissigsten Sachen überlegt, und auf die naheliegenste bin ich nicht gekommen. Blöd :wink:

Danke
Markus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke,
über

event.getSource() == myList.getSelectionModel()

gehts!

gruss
Markus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]