Java:无法强制转换为自定义类

Java:无法强制转换为自定义类,java,swing,casting,jbutton,classcastexception,Java,Swing,Casting,Jbutton,Classcastexception,我正在创建一个Tic-Tac-Toe游戏,其中网格中的一个正方形由我创建的一个名为square的类表示。它扩展了JButton,但我添加了一个名为pressable的布尔字段,用于说明是否可以在游戏中按下按钮。如果按钮已经有字母,则无法按下。我想在actionPerformed()方法中实现代码,该方法将检查pressable变量,如果pressable为false,它将不会更改正方形的字母。我在ActionEvent上使用getSource()方法来引用按下的方块。因此,我需要将对象强制转换为

我正在创建一个Tic-Tac-Toe游戏,其中网格中的一个正方形由我创建的一个名为square的类表示。它扩展了JButton,但我添加了一个名为pressable的布尔字段,用于说明是否可以在游戏中按下按钮。如果按钮已经有字母,则无法按下。我想在actionPerformed()方法中实现代码,该方法将检查pressable变量,如果pressable为false,它将不会更改正方形的字母。我在ActionEvent上使用getSource()方法来引用按下的方块。因此,我需要将对象强制转换为类型Square,以便访问其可按字段。但是当我这样做时,我得到了以下错误:
java.lang.ClassCastException:javax.swing.JButton不能转换为tic.tac.toe.Square
这对我来说没有意义。在我需要每个方块都有一个可按下的区域之前,我使用了一个JButton,它工作得很好。但由于Square继承了JButton,我认为它也可以工作。我怎样才能解决这个问题

JVM告诉您的是事实:
getSource()
返回的对象实际上是一个JButton,不是一个正方形对象,尽管您在上面有陈述。事实上,您正在将ActionListener添加到JButton,而将而不是添加到方形对象。你需要检查你的代码,看看为什么会这样。如果您需要我们的更多帮助,您需要显示此代码


编辑
你说:


我查看了一下,发现我的“开始”按钮也经历了同样的过程,这就是错误的来源

谢谢你的更新


这表明您对所有按钮使用一个ActionListener,这是您不想做的。当然,所有的tic-tac-toe按钮都可以使用同一个侦听器,但是其他任何按钮都应该使用自己的侦听器对象,可能通过匿名内部类。

JVM告诉您的是事实:由
getSource()
返回的对象实际上是一个JButton,而不是一个方形对象,尽管你的上述陈述。事实上,您正在将ActionListener添加到JButton,而将而不是添加到方形对象。你需要检查你的代码,看看为什么会这样。如果您需要我们的更多帮助,您需要显示此代码


编辑
你说:


我查看了一下,发现我的“开始”按钮也经历了同样的过程,这就是错误的来源

谢谢你的更新


这表明您对所有按钮使用一个ActionListener,这是您不想做的。当然,所有tic-tac-toe按钮都可以使用同一个侦听器,但是其他任何按钮都应该使用自己的侦听器对象,可能通过匿名内部类。

您可以在第一次使用.setEnabled(false)单击JButton时禁用它,这将解决此问题。但是我同意HovercraftFullOfEels。

您可以在第一次使用.setEnabled(false)单击JButton时禁用它,这样可以解决这个问题。但我同意HovercraftFullOfEels。

欢迎来到SO。请阅读这些关于如何发布问题的链接()。这样你会得到更好的结果。提示(显示一些代码会很有帮助)。欢迎来到SO。请阅读这些关于如何发布问题的链接()。这样你会得到更好的结果。提示(显示一些代码会很有帮助)。我查看了一下,发现我的“开始”按钮也经历了同样的过程,这就是错误的来源。谢谢大家!@user3113531:谢谢你的更新。请参阅编辑回答。我查看了一下,发现我的“开始”按钮也经历了相同的过程,这就是错误的来源。谢谢大家!@user3113531:谢谢你的更新。请参见编辑以回答问题。