Swing Probleme mit JList

y0dA

Top Contributor
Hi!
Ich habe eine JList mit Mehrfachselektion, wenn ich nun auf eine Zeile der JList klicke wird sofort die valueChanged Methode aufgerufen obwohl ich eigentlich noch mehr selektieren möchte - muss ich einen anderen Listener benutzen oder ist getValueIsAdjusting eventuell die Lösung?

Weiteres Problem ist die selektierten Elemente (hole ich mir mit getSelectedValues) von Object[] nach MeineEnumKlasse[] zu casten:
Java:
MeineEnumKlasse mek [] = (FileFormatEnum []) o;
Stacktrace:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lde.domain.enumeration.MeineEnumKlasse;
 
Zum Listener: weiß ich nicht, lange nichts mehr mit gemacht.

Zu dem Object[]:

Der Object[] ist auch kein deineKlasse[]

Da könntst du sowas machen:
Java:
MeineEnumKlasse mek [] = new MeineEnumKlasse[o.length];
Object[] objs = o;
for(int i = 0; i < o.lenght; i++){
   mek[i] = (MeineEnumKlasse) o[i];
}

Oder aber die SelectionRange mit dem ListenModel bearbeiten.
 
Zum Listener: weiß ich nicht, lange nichts mehr mit gemacht.

Zu dem Object[]:

Der Object[] ist auch kein deineKlasse[]

Da könntst du sowas machen:
Java:
MeineEnumKlasse mek [] = new MeineEnumKlasse[o.length];
Object[] objs = o;
for(int i = 0; i < o.lenght; i++){
   mek[i] = (MeineEnumKlasse) o[i];
}

Oder aber die SelectionRange mit dem ListenModel bearbeiten.

o.length geht doch nicht - es ist ja eigentlich ein Object was ich übergeben bekomme.
 
Solltest vielleicht beschreiben, was du machen willst damit. Sonst weiß ja keiner wie sich die JList verhalten soll...
 
Was soll ich da großartig erläutern?
Ich möchte per JList mittels Mehrfachselektion Entries selektieren und selbige dann in als List<MeinEnum> einer Service Methode übergeben.

Listener hierbei ist ein ListSelectionListener und bei der valueChanged Methode möchte ich die selektierten Werte auslesen und wieder in das ursprüngliche Objekt (eben die Enumklasse casten). Machen wollte ich das eigentlich mit JList.getSelectedValues() nur bekomme ich die selektierten Values nicht gecastet. Weiters wollte ich fragen ob das Verhalten verändert werden kann, also dass nicht bei jeder Selektion die valuechanged Verarbeitung ausgeführt wird sondern vllt wenn man mit der Selektierung fertig ist (focusEvent?).

**EDIT**
Das mit dem casten habe ich schon hinbekommen.
 
Zuletzt bearbeitet:
Eben die beschreibung ist ungenau.
Ein valueChanged kommt eben bei jedem valueChanged (Deselektion und Selektion) und bei jedem valueChanged ein Service aufzurufen wird wohl unperfomant sein.
 
Eben die beschreibung ist ungenau.
Ein valueChanged kommt eben bei jedem valueChanged (Deselektion und Selektion) und bei jedem valueChanged ein Service aufzurufen wird wohl unperfomant sein.

Was ich hinter dem valueChanged mache ist doch jetzt egal. Es geht darum ob man diese JList Thematik mit oben genannten Listener löst oder ob man eine andere Möglichkeit anstreben sollte. Ebenso gibt es eine Möglichkeit dass man es umgehen kann dass bei jeder Selektion/Deselektion der Code aufgerufen wird - wie ich schon erwähnt habe soll der Listener eigentlich erst dann die Daten verarbeiten wenn man mit der Selektierung/Deselektierung fertig ist. Deshalb auch meine Frage ob ich vllt eine anderen Listener benutzen sollte oder ob eventuell getValueIsAdjusting hierbei eine Rolle spielt?
 
Woher soll der Listener den wissen ob du "fertig" bist mit der Selektion? Hindert dich doch keiner dran noch mal ein weiteres Element dazu zu selektieren?
 
Wann soll den dein Code ausgefuehrt werden? Sprich wie stellst du fest das der User mit der Selection fertig ist?

Der ListSelectionListener wird bei jedem Select/Deselect ausgefuehrt. Dies ist woh der falsche Loesungsansatz.

Eventuell auf den ListSelectionListener ganz verzichen und einen Button verwenden, oder ein FocusListener wenn du die Liste verlaesst oder du arbeitest mit einem Delay (falls innerhalb von 3 Sekunden nichts Selektiert wurde),...oder oder oder
 
Wann soll den dein Code ausgefuehrt werden? Sprich wie stellst du fest das der User mit der Selection fertig ist?

Der ListSelectionListener wird bei jedem Select/Deselect ausgefuehrt. Dies ist woh der falsche Loesungsansatz.

Eventuell auf den ListSelectionListener ganz verzichen und einen Button verwenden, oder ein FocusListener wenn du die Liste verlaesst oder du arbeitest mit einem Delay (falls innerhalb von 3 Sekunden nichts Selektiert wurde),...oder oder oder

Darum geht es mir ja. Ist best practise hierbei die valueChanged Variante oder macht man besser einen FocusListener bei Mehrfachselektion?
 
Darum geht es mir ja. Ist best practise hierbei die valueChanged Variante oder macht man besser einen FocusListener bei Mehrfachselektion?

Es gibt keine BestPractice... Es kommt auf den Anwendungsfall an.
In deinem Fall würde ich wohl einen ActionListener oder einen Button anbieten. Du hast ja auch noch die Möglichkeit ein Kontextmenü aufzurufen welche ein Action mit den selektieren Elemente ausführt.
Ich würde es als User komisch finden, dass erst was passiert wenn ich die JList verlasse und dazu in eine andere GUI-Komponente springen muss.
 

Zurück
Oben