2013-12-18 3 views
0

그리드의 사각형이 내가 만든 Square라는 클래스로 표시되는 Tic-Tac-Toe 게임을 만들고 있습니다. 그것은 JButton을 확장하지만, 이라는 부울 필드를 추가했습니다. 버튼은 게임 내에서 버튼을 누를 수 있는지 여부를 나타냅니다. 버튼에 이미 문자가 있으면 버튼을 누를 수 없습니다. 가압 변수 변수를 확인하는 내 actionPerformed() 메소드에 코드를 구현하고 가압 가능이 거짓이면 사각형 문자를 변경하지 않습니다. 내 ActionEvent에 getSource() 메서드를 사용하여 누를 수있는 사각형에 대한 참조를 제공합니다. 따라서 프레스 가능 필드에 액세스 할 수 있도록 Square를 입력하기 위해 Object를 캐스팅해야합니다. 하지만 이렇게하면 다음과 같은 오류가 발생합니다. java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square 이것은 나에게 의미가 없습니다. 각 칸에 프레스 블럭이 필요하기 전에 JButton을 사용했습니다. 그러나 Square가 JButton을 상속 받기 때문에, 나는 그것이 잘 작동 할 것이라고 생각할 것입니다. 이 문제를 어떻게 해결할 수 있습니까?Java : 사용자 정의 클래스로 캐스팅 할 수 없음

+0

안녕하세요. 질문 게시 방법에 대한 링크 (http://stackoverflow.com/questions/how-to-ask http://sscce.org/)를 읽어보십시오. 그렇게하면 더 나은 결과를 얻을 수 있습니다. 약간의 코드를 보여주는 것이 도움이 될 것입니다. http://stackoverflow.com/help/on-topic – OldProgrammer

답변

3

JVM이 당신에게 진실을 말하고있다 : getSource()에 의해 반환 된 객체 것은하는 JButton 및 는 위의 문장에도 불구하고,하지 스퀘어 목적은 사실입니다. 사실, JButton에 ActionListener를 추가하고 Square 객체에이 아닌 을 추가하고 있습니다. 왜 코드인지 검사해야합니다. 도움이 더 필요하시면이 코드를 보여 주셔야합니다.


편집
당신의 상태 :

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

이 문제를 해결할 수있는 .setEnabled (false)로 처음 클릭 할 때 JButton을 비활성화 할 수 있습니다. 하지만 나는 HovercraftFullOfEels에 동의합니다.

관련 문제