例如,我声明了一个名为 label1
的新 JLabel
,我希望当我单击该标签时打印它的名称,然后打印 label1
这是我的代码..
JLabel label1 = new JLabel("test");
label1.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println(label1.getVariableName());
}
}
预期结果是:lable1
JLabel
是否有任何方法可以知道该 Label
的变量名称
最佳答案
没有这么简单的方法。想想看:单个 JLabel
对象可以由许多单独的变量名称引用:
JLabel label1 = new JLabel("test");
JLabel label2 = label1;
JLabel label3 = label2;
或者它可能根本没有变量名:
frame.getContentPane().add(new JLabel("test"));
frame.getContentPane().getComponent(0).addMouseListener(new MouseAdapter() { ... });
此外,并非所有变量名称都在运行时存在。字段名称可以,但局部变量名称(方法内)则不然;它们仅存在于源代码中,而不存在于编译后的字节码中。
如果你的变量是类中的一个字段,那么你可以使用 reflection迭代对象的字段并找到具有所需值的字段:
try {
for (java.lang.reflect.Field f : yourObject.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (f.get(yourObject) == label1) {
System.out.println(f.getName());
}
}
} catch (Throwable t) {
throw new RuntimeException(t);
}
(其中 yourObject
是声明该字段的类的实例;例如 JFrame
)。
为此使用反射是如此丑陋,除了调试之外,您不应该将其用于任何其他用途。
否则,请详细解释一下您的身份 actually尝试这样做,可能会有解决方法。
关于java - 如何在单击 JLabel 时获取其变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707468/