如何在JPanel上按名称或ID查找元素?

时间:2014-03-17 11:03:35

标签: java swing jpanel

我已经开始使用Java Swing了,我问自己是否可以通过Id或简单的名称获取通用JPanel上的元素。 我的意思是在javascript中使用的' getElementById(“example”)'。

这是一个小例子,用我想得到的伪代码:

....

myButton = my_panel.getElementById("xxxxxxx");

// OR BY VARIABLE NAME

myButton = my_panel.getElementByVariableName("xxxxxxx");

....

这可能在java中吗?

3 个答案:

答案 0 :(得分:3)

您可以使用putClientPropertygetClientProperty,如下面的代码所示:

    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不同。大多数情况下,将概念从一个系统直接转移到另一个系统并不是一个好主意。你需要习惯每个人充分利用它。