我正在使用java swing库开发一款名为DAO的棋盘游戏。
问题在于,在人类玩家移动之后,通过点击他想要播放的片段图像的JButton,我调用计算机AI例程但在鼠标事件功能内部。通过仅在函数返回时执行此操作,计算机结束其转动,JButtons刷新其图像(setIcon进入)。
我想知道如何强制JButtons在单击它们时更改它们的图像,而不仅仅是当鼠标事件函数结束时(因为我需要处理其中的数据)。
我已经尝试了所有这些
myButtons[i][j].setIcon(xIcon);
myButtons[i][j].revalidate();
myButtons[i][j].repaint();
myButtons[i][j].validate();
没有工作。
提前谢谢
答案 0 :(得分:1)
所有Swing活动都有一个线程。
这是过程。
这意味着如果你需要做任何超过1/100秒左右的事情,你不应该做任何从swing事件开始的线程。相反,产生自己的线程并将swing线程返回给系统,以便更新GUI。
现在,你的线程绝不能更新任何GUI对象!如果需要更新GUI对象,请使用invokeLater将代码放回AWT线程。
不符合此规则并在AWT线程上执行任务的新Java程序员几乎肯定是人们认为Java速度缓慢的最大原因。
答案 1 :(得分:1)
您可能想尝试将点击JButton
时执行的操作放入Swing工作人员。这将允许任务在后台继续,而用户仍然可以单击其他按钮等。
请参阅http://java.sun.com/docs/books/tutorial/uiswing/concurrency/simple.html。