2009-05-19 6 views
1

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?

+1

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

Antwort

3

Genau wie für Tabellen wirklich. Eine Renderer-Komponente ist eigentlich keine reale Komponente. Es ist wie eine Vorlage, mit der eine gefälschte Komponente gezeichnet wird. Warum versuchst du nicht, deine Komponenten in eine JScrollPane zu stecken oder sie zu einer JTable mit einer Spalte zu machen und stattdessen die entsprechenden Renderer/Editoren zu implementieren?

+0

Ja, Renderer tun ziemlich genau das, was sie sagen: Rendern. Sie sollen nicht benutzt werden, um irgendeine Logik zu vermitteln. –

Verwandte Themen