从另一个类访问 Swing 组件
Posted
技术标签:
【中文标题】从另一个类访问 Swing 组件【英文标题】:Accessing Swing-Components from another class 【发布时间】:2012-09-07 16:40:18 【问题描述】:我有一个结构如下的 Java-Swing-GUI: JFrame -- JPanel1 -----jButton1 -----jLabel1
我的目标是,当按下 jButton1 时,我想更改 jLabel1 的颜色或在其上设置一些文本,但这应该在外部类中完成(我们称之为 externalClass)。
所以在 GUI 类的构造函数中,我将自己传递给我的外部类:
public class GUIclass extends javax.swing.JFrame
private externalClass e;
public GUIclass()
initComponents();
e = new externalClass(GUIclass.this);
在我的外部课程中,我无法访问例如标签:
private GUIclass g;
public externalClass(GUIclass g)
this.g = g;
System.out.println(g.getComponentCount());
// --> only 1, is this the JFrame (?)
System.out.println(g.getComponent(0).getName());
// always "null"
谁能向我解释我如何才能访问该标签? 我也很担心为什么组件的名称总是“null”。
提前致谢!
【问题讨论】:
【参考方案1】:您在 JPanel 中使 JLabel 的实例成为全局的,并在 JPanel 中为您的 JLabel 提供一个 getter。
您通过构造函数将 JPanel 的实例传递给您的外部类。
在您的外部类中,您使用 JPanel 实例来获取 JLabel 实例。
JLabel label = panel.getJLabel();
【讨论】:
【参考方案2】:只有一个组件直接连接到JFrame
,即JRootPane
。
要从ExternalClass
访问JLabel
,您可以从框架的内容窗格中获取组件:
JPanel panel = (JPanel) g.getContentPane().getComponent(0);
JLabel label = (JLabel) panel.getComponent(1);
还有
g.getComponent(0).getName()
将默认返回 null
,因为这是设置为 JRootPane
的名称。
更多信息请见How to Use Root Panes。
【讨论】:
以上是关于从另一个类访问 Swing 组件的主要内容,如果未能解决你的问题,请参考以下文章
从另一个不同的 AngularJS 组件访问表单(用于验证)