O to to... jak mnie to wkurzało... Nawet się wściekłem i zrobiłem takie cuś (udało się wygrzebać), co po mocnym okrojeniu wyglądałoby tak:
public abstract class QListSelectionListener<Element> implements ListSelectionListener {
public abstract boolean onSelect(ListSelectionEvent event, int index, Element value);
public abstract boolean onClear(ListSelectionEvent event);
public QListSelectionListener(JList list) {
this.owner = list;
}
@Override
public void valueChanged(ListSelectionEvent event) {
if( event.getValueIsAdjusting() ) { return; }
DefaultListSelectionModel selection = (DefaultListSelectionModel)event.getSource();
int index = selection.getAnchorSelectionIndex();
if(-1 == index) {
onClear(event);
} else {
onSelect(event, index, (Element)owner.getModel().getElementAt(index) );
}
}
private final JList owner;
}
coby rzutowań i zaznaczenia od zaznaczenia sobie oszczędzić w handlerach... a potem się dowiedziałem, co to jest "unchecked cast" ... i że cały ten kod to można kotu w zad wsadzić. I całe to naklepane dzieło postanowiłem wyprzeć z pamięci. Nie udało się :D Na ile związek z tematem? Głupia obsługa zaznaczenia wiersza - i i dwa rzutowania pod rząd, żeby pobrać model, a potem żeby sobie wartość tego wiersza zgarnąć... bo ani event, ani modele nie mają pojęcia o tym, co trzymają. Więc tak - niestety dobrze zaprojektowany program jeśli będzie miał GUI, to rzutowaniami będzie tłukł ostro ;)
Ktoś coś wie o tym, czy jest w planach to kiedyś zgenerics'ować tak jak collections? Nie jestem na bieżąco.
No i ten potworek pokazuje też, że można - jak się jest durniem - napisać kod, który robi totalnie idiotyczne rzutowania (np Number na ImageIcon ;)) - i ani kompilator, ani runtime słowem nie piśnie. Uważać z rzutowaniami człowiek musi...