从另一个类访问Swing-Components

时间:2012-09-14 13:41:35

标签: java swing components

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

提前致谢!

2 个答案:

答案 0 :(得分:3)

您在JPanel中创建了JLabel全局实例,并在Jaabel的JPanel中提供了一个getter。

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

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

JLabel label = panel.getJLabel();

答案 1 :(得分:3)

只有一个组件直接附加到JFrameJRootPane

要从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