1

次のコードがあり、19行目で「最終変数カウントに値を割り当てることができません」というエラーが表示されますが、「LISTENER」で使用するには、この変数を最終変数として割り当てる必要があります。間違いはどこにありますか?

import java.awt.event.*;
import javax.swing.*;


public class ButtonTester
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        JButton button = new JButton();
        frame.add(button);

        final int count = 0;

        class ClickListener implements ActionListener
        {
            public void actionPerformed(ActionEvent event)
            {
                count++;
                System.out.println("I was clicked " + count + " times");
            }
        }

        ActionListener listener = new ClickListener();
        button.addActionListener(listener);

        frame.setSize(100,60);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
4

3 に答える 3

4

変数は、 final一度割り当てられると変更できません。解決策は、変数を ClickListener クラスのメンバーにすることです。

import java.awt.event.*;
import javax.swing.*;


public class ButtonTester
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        JButton button = new JButton();
        frame.add(button);

        class ClickListener implements ActionListener
        {
            int count = 0;
            public void actionPerformed(ActionEvent event)
            {
                count++;
                System.out.println("I was clicked " + count + " times");
            }
        }

        ActionListener listener = new ClickListener();
        button.addActionListener(listener);

        frame.setSize(100,60);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
于 2013-02-11T15:11:13.620 に答える
2

クラス内で count を使用していますがClickListener、クラス外で宣言されています。内ClickListenerでのみ使用しているため、宣言をそこに移動します。クラスを静的にすることもできます。

    static class ClickListener implements ActionListener
    {
        private int count = 0;
        public void actionPerformed(ActionEvent event)
        {
            count++;
            System.out.println("I was clicked " + count + " times");
        }
    }
于 2013-02-11T15:10:42.963 に答える
1

変数を ClickListener 内に移動します。これが本当に必要なものです。変数をクラスの外に移動する場合は、定数のように扱われるため、final でなければなりません。

于 2013-02-11T15:10:56.243 に答える