3

如果屏幕上有很多 JLabel 并且我知道它们的名字,我将如何选择查找它们?

例如,我知道我之前(动态)创建了一个名为 2340 的新 JLabel。有没有类似的东西

JLabel image = findJlabel ("2340");

为了选择 JLabel 组件?

谢谢, 内科

编辑:只想展示我如何创建这些 JLabel

// 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” sicle 里面,使用:

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 回答
0

为了选择 JLabel 组件?

你是如何“选择”标签的?

如果是通过鼠标,只需添加一个 mouseListener 并使用 getSource()

于 2013-01-06T05:52:50.157 回答