我已经开始使用Java Swing了,我问自己是否可以通过Id或简单的名称获取通用JPanel上的元素。 我的意思是在javascript中使用的' getElementById(“example”)'。
这是一个小例子,用我想得到的伪代码:
....
myButton = my_panel.getElementById("xxxxxxx");
// OR BY VARIABLE NAME
myButton = my_panel.getElementByVariableName("xxxxxxx");
....
这可能在java中吗?
答案 0 :(得分:3)
您可以使用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());
答案 1 :(得分:1)
Swing core对组件没有Id
的概念。您可以使用setName()设置唯一名称,然后递归遍历容器的组件树以获取具有特定名称(Get a Swing component by name)的组件。
答案 2 :(得分:0)
虽然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不同。大多数情况下,将概念从一个系统直接转移到另一个系统并不是一个好主意。你需要习惯每个人充分利用它。