Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置具有刷新率的JFrame?_Java_Jframe - Fatal编程技术网

Java 如何设置具有刷新率的JFrame?

Java 如何设置具有刷新率的JFrame?,java,jframe,Java,Jframe,我有一个2d游戏,除了图形,整个结构都是完全编码的。我只是更新JFrame的单个组件,它是一个包含50个图像的图形。每帧图像位于不同的位置,因此需要刷新率 为了绘制,我已经重写了paintComponent()方法,所以我真正需要做的就是每隔40毫秒重新绘制组件(同样,它只是一个图形) 如何设置每秒25帧的JFrame?这将使用。40毫秒的周期将产生25赫兹的频率 private final Timer timer = new Timer(40, this); 附录:计时器的ActionLis

我有一个2d游戏,除了图形,整个结构都是完全编码的。我只是更新JFrame的单个组件,它是一个包含50个图像的图形。每帧图像位于不同的位置,因此需要刷新率

为了绘制,我已经重写了paintComponent()方法,所以我真正需要做的就是每隔40毫秒重新绘制组件(同样,它只是一个图形)

如何设置每秒25帧的JFrame?

这将使用。40毫秒的周期将产生25赫兹的频率

private final Timer timer = new Timer(40, this);
附录:计时器的
ActionListener
通过调用
repaint()
来响应,它随后调用被重写的
paintComponent()
方法

@Override
public void actionPerformed(ActionEvent e) {
    this.repaint();
}
这使用了。40毫秒的周期将产生25赫兹的频率

private final Timer timer = new Timer(40, this);
附录:计时器的
ActionListener
通过调用
repaint()
来响应,它随后调用被重写的
paintComponent()
方法

@Override
public void actionPerformed(ActionEvent e) {
    this.repaint();
}

刷新JFrame是个坏主意。它是Swing中为数不多的重型部件之一。最好的办法是

  • 识别包含动画的面板
  • 创建一个扩展JPanel的类。i、 e.游戏窗格扩展JPanel
  • 覆盖组件(无)
你的标题有误导性,你做得对

  • 在JFrame中创建一个runner类

您的动画将更加平滑。并使用MVC和事件刷新UI的其他部分

问候,,
Stéphane

刷新JFrame是个坏主意。它是Swing中为数不多的重型部件之一。最好的办法是

  • 识别包含动画的面板
  • 创建一个扩展JPanel的类。i、 e.游戏窗格扩展JPanel
  • 覆盖组件(无)
你的标题有误导性,你做得对

  • 在JFrame中创建一个runner类

您的动画将更加平滑。并使用MVC和事件刷新UI的其他部分

问候,,
Stéphane

我想你不想用25 fps来更新JFrame,而是想更新它的一些内容。你使用Java3D吗?你使用OpenGL吗?你的显示面板(jpanel,widget,…)的父类是什么?这是一个广泛的问题,正如前面所说的,我认为是无法回答的。@Hovercraft-Full-Eels:现在应该足够具体了。如果需要更多的细节,请告诉我。我想你不想用25 fps更新JFrame,但要更新其中的一些内容。你使用Java3D吗?你使用OpenGL吗?你的显示面板(jpanel,widget,…)的父类是什么?这是一个广泛的问题,正如前面所说的,我认为是无法回答的。@Hovercraft-Full-Eels:现在应该足够具体了。告诉我是否需要更多详细信息。这只是添加到公共静态void main方法的末尾?@Will:Yes,只要您在上,通常在
setVisible()
之后。这只是添加到公共静态void main方法的末尾?@Will:Yes,只要您在上,通常在
setVisible()之后)