ループせずに、アレイのすべてのコンポーネントを選択します
質問
私はJLabels
の完全な配列を作ったし、彼らにリスナーを追加したいと思います。
リスナーがクリックされた1を正確に知る必要はありません、ただ1つでした。 配列全体にリスナーを追加する代わりに「の()」ループを使用する方法はありますか?
読みいただきありがとうございます。
解決
あなたのラベルは、あなたがこのコンテナにリスナーを追加し、特定の場所にあるコンポーネントを知ることができます(JPanelのような)コンテナに追加されている場合。
JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );
それは私に、ユーザーがクリックした場所を与えるために、この場合、私はのMouseListenerを使用します。
private static MouseListener whichOneListener = new MouseAdapter() {
public void mouseClicked( MouseEvent e ) {
JComponent c = ( JComponent ) e.getSource();
JLabel l = ( JLabel ) c.getComponentAt( e.getPoint() );
System.out.println( l.getText() );
}
};
そして正しく印刷どのコンポーネントがクリックされました。
の完全なソースコードはこちら
他のヒント
はありません私の知る限り、ボックスソリューションのないうちはありません。別に愚かなハックを使用してから、私はあなたがforループを使用する必要があり、それは10行のコード、心配することは何もないかもしれないと思う。
あなたはクラスでのJLabelのあなたの配列をラップし、それらを追加するときに、リスナーを登録し、独自の追加()メソッドを実装することができます。
この方法は、あなたが後でそれらを反復処理する必要はない..
あなたはJPanelの上のリスナー(または任意のコンポーネントのボタンがでている)を登録することができますので、あなただけの単一のリスナーを記述する必要があります。
、私は<のhref = "http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#forAllDo%28javaを使用してお勧めしたいです.util.Collection、%20org.apache.commons.collections.Closure%29" のrel = "nofollowをnoreferrer"> CollectionUtils.forAllDo を - あなたは、オブジェクトの束に同じアクションを適用することができます方法