Ich verwende einen benutzerdefinierten Renderer für JList, aber keine der gerenderten Komponenten ist verfügbar.So aktivieren Sie Ereignisse für Komponenten in JList
list.setCellRenderer(new ListCellRenderer() {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JCheckBox c = new JCheckBox();
JButton b = new JButton("My Button!");
JPanel p = new JPanel(new FlowLayout());
p.add(c);
p.add(b);
if (isSelected) {
p.setBackground(Color.LIGHT_GRAY);
}
return p;
}
});
Ein Klick auf das Kontrollkästchen oder die Schaltfläche führt zu nichts. Ich habe auch versucht, ActionListener zu Schaltflächen hinzuzufügen, aber es hat nicht ausgelöst, während geklickt wurde. Das einzige, was funktioniert, ist die Hintergrundfarbe während des ausgewählten Gegenstandes (siehe Screenshot).
Es gibt nicht einmal die "Klick-Animation", wenn ich auf die Schaltfläche klicke.
alt text http://foto.darth.cz/pictures/2009-05-19_151057.png
Also meine Frage ist, habe ich etwas anderes zu tun Evens auf gerenderte Komponenten zu ermöglichen?
FYI, es ist nie eine gute Idee, neue Komponenten innerhalb des Renderers zu erstellen. Stellen Sie sich den Renderer als einen Stempel vor. Die Liste ändert den Inhalt basierend auf Listenelementen und stempelt dann den Renderer auf den Grafikbereich. Wenn Sie jedes Mal einen neuen erstellen, verschwenden Sie Speicher und machen den Müllsammler unglücklich. – basszero