2013-12-18 130 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。

相关问题