我正在创建一个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:无法投射到自定义类
回答
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,而您并不想这么做。当然,所有井字游戏按钮都可以使用相同的侦听器,但其他任何人都应该使用自己单独的侦听器对象,可能是通过匿名内部类。
我看着它,意识到我的“开始”按钮正在经历相同的过程,这是错误的来源。谢谢! – user3113531
@ user3113531:感谢您的更新。请参阅编辑以回答。 –
你可以在第一次点击时使用.setEnabled(false)来禁用JButton,这将解决这个问题。但我同意HovercraftFullOfEels。
- 1. 将类投射到自定义类
- 2. 无法将MembershipUser投射到自定义类(ASP.NET)
- 3. 将对象投射到自定义类
- 4. 无法在vb.net中投射自定义listviewitem类
- 5. 无法投射到我的自定义配置节
- 6. 无法投射Java rawImageInputStream -imageIO
- 7. 爪哇 - 无法投射到子类
- 8. 无法投泛型列表到自定义列表类型
- 9. 将显示对象投射到自定义类对象
- 10. 将自定义类投射到python中的字典
- 11. LinearLayout无法投射到android.widget.checkbox
- 12. Android:FutureTask无法投射到MyClass
- 13. .HashMap无法投射到android.database.Cursor
- 14. Foo无法投射到Foo
- 15. clojure.lang.LazySeq无法投射到clojure.lang.IFn
- 16. MockView无法投射到android.view.ViewGroup
- 17. 为什么我无法将ContactBody投射到SpriteKit中的自定义SKNode
- 18. 无法将EditText投射到自定义适配器中的TextView中
- 19. 如何显式投射类型(自定义类)
- 20. 独立投射自定义控件
- 21. 无法投射MS.Internal.NamedObject
- 22. 无法投射MapView
- 23. 无法投射Combobox.SelectedValue
- 24. 无法投射System.Runtime.Remoting.ObjectHandle
- 25. com.google.gson.internal.LinkedTreeMap无法投射
- 26. 无法投射C#
- 27. java.lang.ClassCastException:android.app.Application无法投射
- 28. 无法投型“MS.Internal.NamedObject”的对象,以自定义类型
- 29. Java自定义ListCellRenderer投射问题(包括SSCCE)
- 30. 无法在silverlight中投射类型isse
欢迎来到SO。请阅读这些链接(http://stackoverflow.com/questions/how-to-ask http://sscce.org/),了解如何发布问题。这样你会得到更好的结果。提示(显示一些代码会有所帮助)。 http://stackoverflow.com/help/on-topic – OldProgrammer