のJavaDocjavax.swing.ListCellRendererのサンプル コードに関する簡単な質問:
ListCellRendererこの例では、が拡張するクラスによって実装されており、メソッドがJLabel単純getListCellRendererComponent(...)に を返すことに少し驚いていますthis。JLabel複数の要素を含むリストであっても、周りに a のインスタンスが 1 つしかないように見えます。
setText(...)通常、リスト内の 2 番目の項目に対してメソッドが内部で呼び出されるとgetListCellRendererComponent(...)、リスト内の既存の最初の項目のラベルが変更されることを期待します。または、実際には、リストが同じJLabelインスタンスを 2 回 (またはそれ以上)、リスト内の各項目に対して 1 回ずつ使用することさえできないはずです。
さて、これを解決する 2 つの方法を思いついたので、実際にどちらが (もしあれば) 起こっているのか疑問に思っていました:
- リスト項目ごと
JListに提供されたの新しいインスタンスを何らかの方法で作成しますか?ListCellRenderer - それとも、実際にこのコンポーネントを何らかのパネルに追加するのではなく、リストのキャンバスで
getListCellRendererComponent(...)そのメソッドを呼び出すためだけに返されたコンポーネントを使用しますか?paint(...)