簡體   English   中英

Java 偵聽器調用重繪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM