Java Einzelnes JList Element deaktivieren

Fleshgrinder

Lt. Junior Grade
Registriert
Mai 2005
Beiträge
407
Wieder mal eine Frage auf die ich keine Antwort finden kann. :)

Ist es in Java irgendwie möglich, bei einer JList einzelne Elemente der Liste zu deaktivieren. Ich denke dabei an so was wie in HTML.

HTML:
<select>
  <option disabled>Deaktivierte Option</option>
  <option>Aktivierte Option</option>
</select>

Sinn und Zweck der Sache wäre, dass man diesen Wert nicht mit der Tastatur anwählen kann und auch nicht mit der Maus. Die Elemente sollen aber auf jeden Fall dargestellt werden.

Konkret – falls es jemand interessiert – geht es um eine alphabetisch sortierte JList die für jeden neuen Buchstaben ein leeren JLabel einfügt, das den Anfangsbuchstaben enthält.

Code:
-----------
|    A    | <- disabled
-----------
|    a1   |
-----------
|    a2   |
-----------
|    B    | <- disabled
-----------
|    b1   |
-----------
...
 
Falls du die Elemente auch anders dargestellt haben willst, ist wahrscheinlich ein selbst geschriebenes ListCellRenderer Objekt das Richtige für dich. Ansonsten könntest du Maus und Tastatur Events abfangen und dementsprechend eine Auswahl verhindern.
 
Es gibt bereits einen eigenen ListCellRenderer mit diesem lässt sich jedoch nur die Darstellung beeinflussen (und auch diese wurde schon sehr stark geändert). Was die Maus und Tastatur Events anbelangt so gibt es eigentlich direkt auch kein Problem, denn wer auf so ein Listenelement klickt, bekommt nix zu sehen - das fange ich schon ab. Das Problem ist nur, wenn man mit den Pfeiltasten der Tastatur auf oder ab navigiert in der List, dann sind diese Element ansteuerbar und das will ich verhindern. Nur ein paar KeyEvent abfangen wird da wohl nicht genügen und selbst wenn stelle ich mir den Aufwand ziemlich horrend vor, herauszufinden welcher Index nun genau übersprungen werden muss (im Besonderen weil es extrem dynamisch ist und sich ständig in Veränderung befinden kann - kommt auf den use-case an).

Aber schon mal Danke für deine Antwort!

Ich glaube, dass es ohne diesen horrenden Aufwand gar nicht möglich ist. Da ist es wohl besser, einfach drauf zu verzichten. Java und Swing sind ein Kapitel für sich und wenn ich von der FH aus nicht mehr dazu gezwungen werde, greif' ich den Blödsinn auch nicht mehr an. ;)
 
Glaube nicht, dass das mit den Key Events so schlimm wäre...
Du kannst ja in ne JList nen Array von Objekten reinschiessen. Und in dem Fall mein ich wirklich Object's. Wie diese Elemente in der JList dargestellt werden bestimmt ihre toString() Methode.
Nun kannst du einen einfachen Container implementieren, der nur die toString() beinhaltet und eine isSelectable(), die du dir selber zusammenpfrimmelst, wie du sie brauchst.

Nun baust du irgendwo eine globale variable hin, die den aktuellen selektierten Index in der JList hält. Bei einem KeyEvent 'hoch' oder 'runter' entscheidest du mit Hilfe des neuen Index und der globalen Variable, ob sich nach oben oder unten bewegt wird. Dann checkst du, ob das neu selektierte Element (Durch Casten auf den ContainerTyp) selectable ist.
Wenn ja, alles gut, wenn nein, entsprechend das nächste Element anspringen, die Richtung weisst du ja.
 
Zurück
Oben