2

我有一个结构如下的 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"
}

任何人都可以向我解释如何访问标签吗?我也担心为什么组件的名称总是“空”。

提前致谢!

4

2 回答 2

3

在 JPanel 中使 JLabel 的实例成为全局的,并在 JPanel 中为 JLabel 提供一个 getter。

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

在您的外部类中的某处,您使用 JPanel 实例来获取 JLabel 实例。

JLabel label = panel.getJLabel();
于 2012-09-14T13:52:03.467 回答
3

只有一个组件直接连接JFrameJRootPane.

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

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

g.getComponent(0).getName()

null默认返回,因为这是设置为JRootPane.

有关更多信息,请参阅如何使用根窗格

于 2012-09-14T14:28:49.200 回答