【发布时间】:2011-01-12 17:09:33
【问题描述】:
我正在创建一个简单的游戏,我想在每一步之后重新绘制棋盘。所以,在我调用 move() 之后,我想做的是:(顺便说一下,一个 View 是一个保存碎片的 JComponent;由于移动后碎片的数量发生了变化,因此需要重新绘制)
for(View v : views){
v.repaint();
}
它不工作。当我在单个视图上调用 repaint() 时,它工作正常。我尝试使用paintImmediately、revalidate 和update... 在循环中没有任何作用。
有什么想法吗?提前致谢。
编辑: 我应该补充一点,当调整窗口大小时,repaint() 确实会被调用,所以我知道 View 的 paintComponent 方法是有效的并且可以工作。它只是没有从循环中调用。当调试器单步执行循环时,它没有进入 repaint() 并且屏幕没有任何反应。
【问题讨论】:
-
您所包含的来源没有任何问题。您似乎需要包含更多有问题的来源。
-
我读到了那个帖子——我从那里得到了立即尝试绘画的想法。至于发布更多代码,我应该发布什么? paintComponent 方法工作正常(请参阅已编辑的问题)。
-
EDT 上有那个循环吗?
-
嗯...我不是很有经验,所以我知道你的意思。如果这是您的问题,它不是多线程应用程序。我有一个 MouseListener,它监听知道点击了哪个 View/JComponent,根据选择的 View 调用 move(),然后调用循环来重绘所有组件。