Это потому, что вы, вероятно, пытаетесь получить доступ к этой кнопке из анонимного класса, который вы используете следующим образом:
button.addActionListener(
new MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
//do your things on button }
}
}
);
Это не работает, потому что в Java анонимные классы не могут видеть переменные, объявленные в методах, в которых они тоже объявлены, поскольку их область видимости разделена. Единственный способ показать вашему классу это - принудительно установить ограничение final
, которое гарантирует компилятору, что переменная не изменится после инициализации, что позволит ему расширить область действия до анонимных классов.
Чтобы быстро это исправить, вы можете получить доступ к кнопке из ActionEvent
внутри actionPerformed
:
((JButton)e.getSource()).setEnabled(false)
В противном случае вы должны где-то конкретно объявить свой ActionListener
или объявить кнопки вне метода с атрибутом static
или final
, особенно если вы планируете изменить некоторые элементы действием, которое запускается другим элементом.