0

変更、追加、削除などを行いたい要素 (具体的には JLabels と JButton) を持つ GUI を作成しようとしています。ただし、Java は、これらのオブジェクトのすべての修飾子が (final を除いて) 無効であることを通知しています。これは、これらのオブジェクトが定義されている場所以外では参照できないことを意味します。私の質問は、これらの要素を後で操作できるようにするにはどうすればよいですか?

関連する場合、私の GUI は、メニュー バー、キャンバス、およびパネル (操作したい要素を含む) を含む JFrame です。

ご協力いただきありがとうございます。

4

1 に答える 1

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");
        }
    }
}
于 2012-10-24T16:15:30.013 に答える