![](/img/trans.png)
[英]java jpanel synchronization with repaint() or: Is a Listener addable to swing's repaint?
[英]Java listener call repaint
我有一個 JPanel,我的(游戲)程序在其中繪制由一段代碼確定的東西。 到目前為止,一切都很好。 我編寫了一個非常基本的監聽器,它監聽程序背景模型的變化,然后應該告訴 GUI 更新,即移動一個游戲塊。
所有這些都發生在 mouseListener 觸發的方法中。
我猜這是問題所在,因為在 JPanel 中再次單擊鼠標會正確更新 JPanel,並且我可以看到模型移動的部分。
JPanel 的代碼:
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
update(g);
}
更新調用了很多對我的問題並不重要的 AWT 代碼,它只是繪制游戲板。
(偽)來自我的控制器的代碼,由鼠標偵聽器在鼠標事件上執行:
public void human_and_cpu_move()
{
human_move(int x, int y, int x2, inty2)
cpu_make_move();
}
背景模型代碼
public void cpu_make_move()
{
do_something_cool;
tell_listener_something_cool_happened();
}
背景監聽器:
public class Background_listener()
{
Controller myController;
Background myBackground;
public Background_listener(Controller controller, Background background){
myController = controller;
myBackground = background;
}
public void tell_listener_something_cool_happened()
{
myController.get_JPanel.repaint();
}
}
我看到了什么行為? 僅當我再次單擊 JPanel 時才會完成 CPU 移動,它們不是自行完成的。 我想要什么? 我希望 CPU 移動完成后立即顯示。 在此先感謝您的幫助,我找不到類似的問題。
我解決了這個問題:我忘記告訴 GUI 更新它從背景模型中保存的游戲板表示。 簡單的問題,簡單的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.