2013-12-18 131 views
0

我正在創建一個Tic-Tac-Toe遊戲,其中網格中的正方形由我創建的稱爲Square的類來表示。它擴展了JButton,但是我添加了一個名爲的布爾字段,可按指出該按鈕是否可以在遊戲中按下。如果按鈕已經有一個字母,那麼它不能被按下。我想在我的actionPerformed()方法中實現代碼,該方法將檢查可按變量,並且如果可按爲假,它將不會更改正方形的字母。我在我的ActionEvent上使用了getSource()方法來給我一個被按下的正方形的引用。因此,我需要投入Object以輸入Square,以便我可以訪問其可按字段。但是當我這樣做時,出現以下錯誤:java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square這對我來說沒有任何意義。在我需要每個廣場有一個可按字段之前,我使用了一個JButton,它工作得很好。但是因爲Square繼承了JButton,所以我認爲它也會起作用。我怎樣才能解決這個問題?Java:無法投射到自定義類

+0

歡迎來到SO。請閱讀這些鏈接(http://stackoverflow.com/questions/how-to-ask http://sscce.org/),瞭解如何發佈問題。這樣你會得到更好的結果。提示(顯示一些代碼會有所幫助)。 http://stackoverflow.com/help/on-topic – OldProgrammer

回答

3

JVM是告訴你真相:通過getSource()返回的對象實際上是在一個JButton,並不是一個方形物體,儘管你上述聲明。所以事實是,您將ActionListener添加到JButton並且將而不是添加到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,而您並不想這麼做。當然,所有井字遊戲按鈕都可以使用相同的偵聽器,但其他任何人都應該使用自己單獨的偵聽器對象,可能是通過匿名內部類。

+0

我看着它,意識到我的「開始」按鈕正在經歷相同的過程,這是錯誤的來源。謝謝! – user3113531

+0

@ user3113531:感謝您的更新。請參閱編輯以回答。 –

1

你可以在第一次點擊時使用.setEnabled(false)來禁用JButton,這將解決這個問題。但我同意HovercraftFullOfEels。

相關問題