gpt4 book ai didi

java - 如何绘制/重绘/动画 (MVC)

转载 作者:行者123 更新时间:2023-12-01 16:57:20 25 4
gpt4 key购买 nike

我正在尝试编写一个使用 MVC 模式为对象(鱼、泡泡、鲨鱼等)制作动画的程序。

模型有一个 LinkedList,其中包含带有 x 和 y 值的对象。 View 具有启动和停止动画的按钮。我将按钮和 Jpanel 添加到 View 中的 JFrame 中。但我不确定如何绘制/动画我的对象。 View 如下所示:

  public class View extends JFrame {
.
.
.
this.add(paintingSheet, BorderLayout.CENTER);
.
.
.
}


public class PaintingSheet extends JPanel {
private Image background;
public PaintingSheet() {
this.background = Toolkit.getDefaultToolkit().createImage("src/resources/background.jpg");
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(this.background, 0,0, this);
}
}

我的计划是在 Controller 中创建一个线程来更新模型中的对象并重新绘制它们。像这样的事情:

Model.updateOjects;
View.PaintingSheet.repaint();
Thread.sleep(x);

1) 是否允许在 View 之外的线程中调用重绘?

2)有更好的方法吗?

3)如何使用模型中更新的 LinkedList 调用重绘?

4)如何排除背景被重绘(它不会移动)?

谢谢

最佳答案

Thread.sleep(x);

阻止 EDT 并且不允许重新绘制。

改用javax.swing.Timer。移动代码

Model.updateOjects;
View.PaintingSheet.repaint();

在计时器的操作中(在 actionPerformed() 方法内部调用)。

关于java - 如何绘制/重绘/动画 (MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com