2013-12-18 2 views
0

Я создаю игру Tic-Tac-Toe, в которой квадрат в сетке представлен классом Square, который я создал. Он расширяет JButton, но я добавил логическое поле под названием с прессом, в котором указано, можно ли нажать кнопку в игре. Если кнопка уже имеет букву, она не может быть нажата. Я хочу реализовать код в моем методе actionPerformed(), который будет проверять переменную с прессой, и если с прессом является ложным, это не изменит букву квадрата. Я использую метод getSource() в своем ActionEvent, чтобы дать мне ссылку на нажатый квадрат. Поэтому мне нужно наложить объект на квадрат, чтобы я мог получить доступ к его прессуемому поле. Но когда я это делаю, я получаю следующую ошибку: java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square Это не имеет для меня никакого смысла. Прежде чем я нуждался в каждом квадрате, чтобы иметь поле с прессом, я использовал JButton, который работал отлично. Но так как Square наследует Дж. Баттона, я думаю, что это сработает. Как я могу это исправить?Java: не может быть добавлен в пользовательский класс

+0

Добро пожаловать в SO. прочитайте эти ссылки (http://stackoverflow.com/questions/how-to-ask http://sscce.org/) о том, как опубликовать вопрос. Таким образом, вы получите лучший результат. Подсказка (показывая, что какой-то код будет полезен). http://stackoverflow.com/help/on-topic – OldProgrammer

ответ

3

Виртуальная машина Java говорит вам правду: объект, возвращаемый getSource()фактически JButton и не Квадрат объекта, несмотря на ваши заявления выше. Таким образом, факт: вы добавляете свой ActionListener в JButton и не к квадратному объекту. Вам нужно будет проверить свой код, чтобы понять, почему это так. Если вам нужна дополнительная помощь, вам нужно будет показать этот код.


Редактировать
Вы состояние:

I looked into it and realized that my "Start" button was going through the same process, which is where the error came from.

Спасибо за обновление.

Это означает, что вы используете один ActionListener для всех кнопок, которые вы не захотите делать. Конечно, все кнопки tic-tac-toe могут использовать один и тот же прослушиватель, но любые другие должны использовать собственный отдельный объект-слушатель, возможно, через анонимный внутренний класс.

+0

Я заглянул в него и понял, что моя кнопка «Пуск» проходит тот же процесс, из которого произошла ошибка. Спасибо! – user3113531

+0

@ user3113531: спасибо за обновление. См. Править для ответа. –

1

Вы можете отключить JButton при первом щелчке с помощью .setEnabled (false), который обойдет эту проблему. Но я согласен с HovercraftFullOfEels.

Смежные вопросы