[英]How can I find elements by name or id, on a JPanel?
我已经开始使用Java Swing,并且问自己是否可以通过ID或仅按名称在通用JPanel上获取元素。 我的意思是在JavaScript中使用类似“ getElementById(“ example”) '的方法。
这是一个小例子,用我想要得到的伪代码:
....
myButton = my_panel.getElementById("xxxxxxx");
// OR BY VARIABLE NAME
myButton = my_panel.getElementByVariableName("xxxxxxx");
....
在Java中有可能吗?
您可以使用putClientProperty
和getClientProperty
,如下面的代码所示:
JPanel jPanel = new JPanel();
JLabel label=new JLabel("Hi");
jPanel.add(label);
jPanel.putClientProperty("hiLabel", label);
System.out.println(jPanel.getClientProperty("hiLabel").getClass().getName());
Swing核心没有组件Id
概念。 您可以使用setName()设置唯一的名称,然后递归地遍历容器的组件树以获取具有特定名称的组件(按名称获取Swing组件 )。
尽管Swing组件可以有一个名称( http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getName() ),但这不是id; 您需要确保一致性。
此name
属性并未广泛使用。 在SwingUtilities
,没有任何方法可以通过名称查找子代,而仅是祖先: SwingUtilities#getAncestorNamed 。
您将必须自己完成此操作。 通常,这并非不可能。 您将从Container
开始,遍历其子级( Component[] getComponents
),然后检查名称。 递归地对每个本身是Container
孩子执行此操作。 发现时中断。
但这对于Swing是不典型的。 该框架不是声明性的。 (其他Java GUI工具包也可以,也可以,例如GWT或Android的本机UI。)您只需存储对以编程方式创建的组件的引用,以供以后使用。
当然,您无法在Java中按变量名称进行搜索。 该名称在运行时不存在。 Java的工作方式不同于JavaScript。 在大多数情况下,将概念从一个系统直接转移到另一个系统并不是一个好主意。 您需要习惯每个人才能充分利用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.