クリック位置でJList
からコンポーネントを取得するにはどうすればよいですか?クリック位置でJListからコンポーネントを取得
私はいくつかのパネルとラベルを挿入する独自のリストセルレンダラーを持っています。 今、私はしたいです。ユーザーがクリックしたラベル。
私は方法list.getComponentAt(evt.getPoint());
を試しましたが、それはJList
全体を返します。
クリック位置でJList
からコンポーネントを取得するにはどうすればよいですか?クリック位置でJListからコンポーネントを取得
私はいくつかのパネルとラベルを挿入する独自のリストセルレンダラーを持っています。 今、私はしたいです。ユーザーがクリックしたラベル。
私は方法list.getComponentAt(evt.getPoint());
を試しましたが、それはJList
全体を返します。
私はこれをテストしていませんでしたが、基本は 与えられた点にある要素のインデックスを取得するには...
JList#locationToIndex(Point)
だろう。JList#getModel#getElementAt(int)
を使用)。ListCellRenderer
をJList#getCellRenderer
としてください。Component
表現Component
のコンテキストレンダラのgetComponentAt
に元Point
......
int index = list.locationToIndex(p);
Object value = list.getModel().getElementAt(int);
Component comp = listCellRenderer.getListCellRendererComponent(list, value, index, true, true);
comp.setBounds(list.getCellBounds(index, index));
Point contextPoint = SwingUtilities.convertPoint(list, p, comp);
Component child = comp.getComponentAt(contextPoint);
ユーザーがセルの外側をクリックしない限り、MadProgrammerはうまく動作します。彼はそれをした場合は、locationToIndex(によって返されたインデックスは)最後のインデックスのセルになりますので、変換されたポイントは、ユーザーが本当にあなたがしなければならないセルをクリックした場合、レンダリングコンポーネント「の」
を確認するには次のようになります。
int index = list.locationToIndex(p);
if (index > -1 && list.getCellBounds(index, index).contains(p)){
// rest of MadProgrammer solution
...
}
これはリスト項目の下をクリックするたびに常に最後の要素を取得するという問題を解決しました。 – TraderJosh
'JList'の場合は、[' ListSelectionListener'](http://docs.oracle.com/javase/7/docs/api/javax/swing/event/ListSelectionListener.html)を追加してください。もっと早く助けを求めるには、[SSCCE](http://sscce.org/)を投稿してください。 –
'JList'はコンテナをコンテナに入れません。 'ListCellRenderer'を使用して、コンポーネントの「ラバースタンプ」をリストにペイントします。つまり、リスト内の各要素は、同じ/単一の 'ListCellRenderer'を使用してレンダリングされます。 – MadProgrammer