JListのカスタムセルレンダラを作成するたびに、それに追加する要素はアクションに応答しません。例えば、セルレンダラーが要素を持つJPanelを返すようにした場合、そのうちの1つにActionListenerがあり、それはまったく応答しません。Java Swing - JListカスタムセルレンダリング - キャプチャアクション
これはなぜですか?
JListのカスタムセルレンダラを作成するたびに、それに追加する要素はアクションに応答しません。例えば、セルレンダラーが要素を持つJPanelを返すようにした場合、そのうちの1つにActionListenerがあり、それはまったく応答しません。Java Swing - JListカスタムセルレンダリング - キャプチャアクション
これはなぜですか?
リストセルレンダラーとして返すアイテムは、正確には:レンダリングを対象としています。リスナーをJListに登録します(通常、ListSelectionListenerが必要です)。
(getListCellRendererComponent()
への各呼び出しは再設定することになっているレンダラは、細胞のためのコンポーネントを返すために、工場のように見えるかもしれないが、実際にはアプローチをレンダリングフライ級に続き、すべてのセルをレンダリングするための同じコンポーネントを使用しています特定のセルの同じコンポーネントインスタンスを返し、セルをレンダリングできるように返します)。
JList
(およびJTable
およびJTree
)は、各セルのコンポーネントをインスタンス化しなくても大量のセルを表示できます。副作用として、レンダリングコンポーネントはイベントに応答できません。これはレンダリングループでのみ使用され、コンポーネントツリーには表示されないためです。
ニール・コフィーは、あなたの代わりにJList
(JTable
、JTree
)にあなたのリスナーを追加し、影響を受けたセル派遣ため、セル固有のロジックに対処するためのヘルパーメソッド(locationToIndex(...)
、getCellBounds(...)
)を使用することができ、言ったのと同じように。
良い説明のために+1 – basszero
レンダリングされたコンポーネントをゴム印と考えてください。 –
非常に良い質問です。私はそれがItemListenersと関係があるかもしれないと思ったが、今はそうは思わない...サンプルコードを見つけようとしたが成功しなかった。 – Uri
こんにちは、私は同じ問題に直面しています、あなたは問題を解決することができますか? – user236501