3

画面に多数の JLabel が表示されていて、それらの名前がわかっている場合、それらの検索を選択するにはどうすればよいですか?

たとえば、以前に 2340 という名前の新しい JLabel を (動的に) 作成したことがわかっています。次のようなものはありますか?

JLabel image = findJlabel ("2340");

JLabel コンポーネントを選択するには?

ありがとう、ネコ

編集:これらの JLabels の作成方法を示したいだけです

// Initially creates all the imagelabels
    public static void createImageLabels (){
        int xcord, ycord;
        JLabel image;
        String imageLabelName; 

        xcord = 0;
        ycord = yOffset;
        for (int row = 0 ; row < map.length; row++) {
            xcord = 0;
            for (int  col = 0 ; col < map[0].length; col++) {
                imageLabelName = Integer.toString(row);
                imageLabelName += Integer.toString(col);
                image = new JLabel(new ImageIcon(space));
                image.setName(imageLabelName);      
                image.setLocation(xcord, ycord);
                image.setSize(24, 24);
                imagePanel.add(image);  
                System.out.println ("Created a Jlabel Named "+imageLabelName);
                xcord += 24;
            }
            ycord += 24;
        }
    }

画面上に imageIcons のタイルを作成し、後でそれらによって表示される画像を変更したい場合は、それを選択して変更します。

4

3 に答える 3

3

すべてのラベルに異なる名前があると仮定すると、HashMaps を使用することをお勧めします。

HashMap<String, JLabel> labels = new HashMap<String,JLabel>();

「for」シクルの中で、次を使用します。

labels.put("1233", new JLabel(new ImageIcon(space)));

必要なラベルを使用するには、次を使用します。

labels.get("1233");

詳細については、次を確認してください。

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

于 2013-01-06T04:33:06.763 に答える
2

現在のコンテナの概念を持つコンポーネントだけを検索したい場合は簡単ですが、子コンテナまたは親コンテナを検索したい場合は、少し複雑になります...

public JLabel findLabelByName(Container parent, String name) {
    JLabel found = null;
    if (name != null) {
        for (Component child : parent.getComponents()) {
            if (child instanceof JLabel) {
                JLabel label = (JLabel)child;
                if (name.equals(label.getName()) {
                    found = label;
                    break;
                }
            }
        }
    }
    return found;
}

ここで、コンテナー階層を上下に検索したい場合は、このメソッドを再帰的に呼び出して、新しい親を渡す必要がありますが、それを理解できると確信しています。すべての楽しみの ;)

于 2013-01-06T04:33:58.993 に答える