Java 从另一个类访问Swing组件
我有一个Java Swing GUI,其结构如下: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
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()