我有一个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”。
提前致谢!
答案 0 :(得分:3)
您在JPanel中创建了JLabel全局实例,并在Jaabel的JPanel中提供了一个getter。
通过构造函数将JPanel的实例传递给外部类。
在外部类的某个地方,您使用JPanel实例来获取JLabel实例。
JLabel label = panel.getJLabel();
答案 1 :(得分:3)
只有一个组件直接附加到JFrame
即JRootPane
。
要从JLabel
访问ExternalClass
,您可以从框架的内容窗格中获取该组件:
JPanel panel = (JPanel) g.getContentPane().getComponent(0);
JLabel label = (JLabel) panel.getComponent(1);
另外
g.getComponent(0).getName()
默认情况下,会返回null
,因为这是设置为JRootPane
的名称。
有关详情,请参阅How to Use Root Panes。