Java 从另一个类访问Swing组件

Java 从另一个类访问Swing组件,java,swing,components,Java,Swing,Components,我有一个Java Swing GUI,其结构如下: JFrame --JPanel1 -----jButton1 -----jLabel1 我的目标是,当按下jButton1时,我想更改jLabel1的颜色或在其上设置一些文本,但这应该在外部类中完成(我们称之为externalClass) 因此,在GUI类的构造函数中,我将自己传递给外部类: public class GUIclass extends javax.swing.JFrame { private externalClas

我有一个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”


提前谢谢

在JPanel中创建JLabel全局实例,并在JPanel中为JLabel提供一个getter

通过构造函数将JPanel实例传递给外部类

在外部类中的某个地方,使用JPanel实例获取JLabel实例

JLabel label = panel.getJLabel();

只有一个组件直接连接到
JFrame
,即
JRootPane

要从
ExternalClass
访问
JLabel
,可以从框架的内容窗格获取组件:

JPanel panel = (JPanel) g.getContentPane().getComponent(0);
JLabel label = (JLabel) panel.getComponent(1);

默认情况下,将返回
null
,因为这是设置为
JRootPane
的名称

有关更多信息,请参阅

g.getComponent(0).getName()