【问题标题】:Accessing Swing-Components from another class从另一个类访问 Swing 组件
【发布时间】: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”。

提前致谢!

【问题讨论】:

    标签: java swing components


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多