我正在尝试编写一个包含我想要更改,添加,删除等元素的GUI(特别是JLabel和JButton)。但是,Java告诉我这些对象的所有修饰符都是无效的(除了final),这意味着我不能在定义它们之外引用这些对象。我的问题是,我如何设置它以便以后可以操作这些元素?
如果相关,我的GUI是一个包含菜单栏,画布和面板(包含我想要操作的元素)的JFrame。
提前感谢您的任何帮助。
答案 0 :(得分:1)
Java告诉我这些对象的所有修饰符都是无效的
根据此描述,您似乎在本地创建需要在其他地方访问的组件,例如在ActionListener
类中。
我建议不要创建属于JFrame
或GUI容器或本地范围的任何组件,例如main
方法,可能需要稍后访问。
下面的简单示例显示了内部类label1
如何轻松访问组件ButtonAction
:
public class SwingExample extends JFrame {
private JButton button1;
private JLabel label1;
public SwingExample() {
super("SwingExample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
button1 = new JButton("Test");
button1.addActionListener(new ButtonAction());
label1 = new JLabel("Swing Example", JLabel.CENTER);
add(label1, BorderLayout.CENTER);
add(button1, BorderLayout.SOUTH);
}
public static void main(String[] args) {
// don't create any locally scoped components here
new SwingExample().setVisible(true);
}
class ButtonAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
label1.setText("label1 Accessed through global variable");
}
}
}