我正在创建一个Tic-Tac-Toe游戏,其中网格中的正方形由我创建的一个名为Square的类表示。它扩展了JButton,但我添加了一个名为 pressable 的布尔字段,用于说明是否可以在游戏中按下该按钮。如果按钮已有字母,则无法按下。我想在我的actionPerformed()方法中实现代码,该方法将检查 pressable 变量,如果 pressable 为false,则不会更改方块的字母。我在我的ActionEvent上使用getSource()方法给我一个对被按下的方块的引用。因此,我需要将Object转换为Square类型,以便我可以访问其可按字段。但是当我这样做时,我收到以下错误:java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square
这对我没有意义。在我需要每个方格都有一个可按字段之前,我使用了一个JButton,它运行得很好。但是,由于Square继承了JButton,我认为它也会起作用。我怎样才能解决这个问题?
答案 0 :(得分:3)
JVM告诉你实情:getSource()
返回的对象实际上是一个JButton而不是一个Square对象,尽管你的声明如上。事实上,您将ActionListener添加到JButton,将不添加到Square对象。您需要检查代码以了解其原因。如果您需要更多帮助,则需要显示此代码。
修改强>
你说:
我调查了一下,发现我的“开始”按钮正在经历相同的过程,这是错误的来源。
感谢您的更新。
这表明您正在为所有按钮使用一个ActionListener,您不想这样做。当然所有的tic-tac-toe按钮都可以使用相同的监听器,但是任何其他按钮都应该使用自己独立的监听器对象,可能通过匿名内部类。
答案 1 :(得分:1)
您可以在第一次单击.setEnabled(false)时禁用JButton,这将解决此问题。但我同意HovercraftFullOfEels。