JList mit custom renderer
Ich habe eine JList, die zeigt, dass mehrere JPanels auf Sie , habe ich einen custom renderer gibt ein neues JPanel.
Die JPanels angezeigt werden, in der JList, aber Sie nicht zugänglich sind, kann ich Sie nicht auswählen kann und wenn ich eine Schaltfläche oder ein Textfeld in ihm kann ich nicht drücken.
Ich will versuchen, ob dies funktioniert in einer JList, denn ich will weiter Paginierung. Ich es geschafft, es funktioniert durch das hinzufügen von Platten zu einem Jscroll pane, würde aber gerne an die JList Sache arbeiten.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist das normale Verhalten der
JList
(undJTabel
,JComboBox
, etc...).Den
JPanel
dass Ihre custom-renderer gibt, ist nicht Hinzugefügt, um die Swing-Hierarchie. Nur seinepaint
Methode verwendet wird, durch dieJList
zeichnen Sie die renderer an der richtigen Stelle. Der renderer nur wirkt wie ein Stempel, und das, was Sie sehen in derJList
sind keine Komponenten, sondern Bilder der Komponenten.Dies ist eine effiziente Art der Darstellung viele Komponenten auf dem Bildschirm, ohne den overhead des realen instanziierten Komponenten. Beachten Sie, dass der renderer zurückgeben kann, immer die gleiche Instanz (es ist sogar vorzuziehen).
Sehen die Swing tutorial für mehr details.
Wenn Sie möchten, dass die Einträge der
JList
zu handeln wie echte Komponenten, die Sie tun können, die folgenden. Erstens, nutzen eineJTable
statt einerJList
. EinJTable
mit einer Spalte und ohne header ist in etwa das gleiche wie einJList
. Warum verwenden Sie einJTable
? DaJTable
bietet Editoren. Editoren registriert bistJTable
, genau wie die Renderer sind. Ein Editor erscheint in der Regel, wenn ein Benutzer klickt auf eine JTable Zelle. Der Editor ist überlagert, die den renderer, und dieses mal ist es eine Reale Komponente. Wenn der Renderer und den Editor-Komponenten identisch sind, dann hat der Benutzer das Gefühl, dass die JTable die Zellen sind echte Komponenten.Den Swing tutorial hat Beispiele für diese Technik.
Einen renderer, der ist nur ein Bild von einer Komponente. Es ist nicht eine Reale Komponente, also Nein, Sie können nicht klicken Sie auf eine Schaltfläche oder das eingeben von text in einem text-Bereich.
Müssen Sie die Verwendung von realen Komponenten für diese. So ist es wahrscheinlich besser, erstellen Sie eine benutzerdefinierte Bedienfeld, mit dem Sie Komponenten und fügen Sie die Systemsteuerung, um ein anderes panel wurde Hinzugefügt, um einen scroll-Bereich.
Hier ist meine Lösung:
}