繁体   English   中英

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

[英]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中有可能吗?

您可以使用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());

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM