Java 通过知道名称来选择JLabel

Java 通过知道名称来选择JLabel,java,swing,jlabel,Java,Swing,Jlabel,如果屏幕上有许多JLabel,并且我知道它们的名称,我将如何选择并查找它们 例如,我知道我以前(动态地)创建了一个名为2340的新JLabel。有类似的吗 JLabel image = findJlabel ("2340"); 要选择JLabel组件 谢谢, 内科 编辑:只是想展示我是如何创建这些jlabel的 // Initially creates all the imagelabels public static void createImageLabels (){

如果屏幕上有许多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;
        }
    }
//最初创建所有ImageLabel
公共静态void createImageLabels(){
int xcord,ycord;
JLabel图像;
字符串imageLabelName;
xcord=0;
ycord=约夫特;
for(int row=0;row

我在屏幕上创建了一个图像图标的平铺,然后,如果我想更改它们显示的图像,我想选择并更改它。

好吧,假设所有标签的名称都不同,我建议您使用HashMaps

HashMap<String, JLabel> labels = new HashMap<String,JLabel>();
要使用所需的标签,请使用:

labels.get("1233");
有关详细信息,请检查:


如果您只想找到具有当前容器概念的组件,那么很容易找到,如果您想搜索子容器或父容器,那么就变得稍微复杂一些

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;
}
现在,如果您想在容器层次结构上下搜索,您需要对该方法执行递归调用,传入新的父级,但我相信您可以找到答案,我不想剥夺您所有的乐趣;)

要选择JLabel组件

您如何“选择”标签


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

你所说的“你知道它的名字”和“动态创建”是什么意思?如果您创建了它,当然您可以让您的程序跟踪它,而不必在以后查找它?所讨论的Jlabel是一个ImageIcon,我只是尝试更改它当前在程序中稍后显示的图像。更简单的方法是在
HashMap jlabelMap
并使用此映射找出您必须修改的JLabel。只需在class1中将JLabel声明为全局变量“
findJlabel(“2340”);
”您的意思是有一个
2339
2338
等。?整个问题都在向我尖叫
JList
JTable
。通过这一切,你到底想达到什么目的?它提供了什么应用程序功能?2) 为了更快地获得更好的帮助,请发布一个。我不介意
Map
技术,我唯一的问题是它可能存在内存泄漏,至少这样,当添加和删除标签时,您总是可以找到它们-虽然不如
Map
那么快…+1 true,通常,我只是确保在从容器中移除标签后将其移除,但事实上这是非常正确的。(Java 1.4有点过时了…最好链接到更更新的文档参考-IMHO)
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;
}