如何在方法中更改JComponent属性

时间:2012-10-24 15:41:37

标签: java swing jcomponent

我正在尝试编写一个包含我想要更改,添加,删除等元素的GUI(特别是JLabel和JButton)。但是,Java告诉我这些对象的所有修饰符都是无效的(除了final),这意味着我不能在定义它们之外引用这些对象。我的问题是,我如何设置它以便以后可以操作这些元素?

如果相关,我的GUI是一个包含菜单栏,画布和面板(包含我想要操作的元素)的JFrame。

提前感谢您的任何帮助。

1 个答案:

答案 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");
        }
    }
}