Frage

Jedes Mal, wenn ich eine benutzerdefinierte Zelle Renderer für eine JList machen, werden alle Elemente, die ich ihm hinzufügen reagieren nicht immer zu Aktionen. Wenn ich die CellRenderers zurückgeben JPanel mit Elementen auf es zum Beispiel habe, von denen eine Action hat, ist es überhaupt nicht reagieren.

Warum ist das?

War es hilfreich?

Lösung

Das Element, das Sie als eine Liste CellRenderers zurückkehren wird genau bestimmt, dass: Rendering . Registrieren Zuhörer mit dem JList (in der Regel, werden Sie eine ListSelectionListener wollen).

Andere Tipps

Der Renderer wie eine Fabrik aussehen kann Komponenten für die Zellen für die Rückkehr, aber in der Tat folgt dem Fliegengewicht Rendering Ansatz und verwendet die gleiche Komponente für alle Zellen Rendering (jeder Anruf getListCellRendererComponent() sollte die gleiche Komponenteninstanz für eine bestimmte Zelle neu zu konfigurieren und senden sie es so, dass die Zelle wiedergegeben werden).

Auf diese Weise können Sie JList (sowie JTable und JTree) zeigen enorme Menge an Zellen ohne Komponenten für jede Zelle instanziieren ist. Als Nebeneffekt kann die Wiedergabekomponente nicht auf Ereignisse reagieren, wie es nur während der Render-Schleife verwendet wird, aber im Komponentenbaum nicht angezeigt wird.

Wie Neil Coffey sagte: Sie Ihre Zuhörer zum JList hinzufügen (JTable, JTree) statt, und verwenden Sie die Hilfsmethoden (locationToIndex(...), getCellBounds(...)) zu versenden, welche Zelle beeinflusst wurde und somit mit zellspezifischen Logik befassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top