当前位置: 首页 > 知识库问答 >
问题:

Java图形更新太快

西门智
2023-03-14

我已经搜索了这个问题,但是每个人似乎都有图形更新太慢的问题。

来介绍我的情况:

我有一个JFrame,我设置为全屏,通过使用兼容的显示模式。在JFrame中,我有几个JPanels和JButton...在一个JPanels上,我正在绘制需要更新的移动对象。

我正在像这样更新图形:验证并重新绘制JFrame,然后重新验证并重新绘制相应的JPanel。图形更新得太快了。(我需要提到的是,在JPanel上,我覆盖了paintComponent方法)。我尝试在JFrame上使用BufferStrategy,但是这会阻止我显示JPanel和JButton(不知道为什么)。

我还借此机会问你们中的一些人,你们是否可以明确区分油漆、验证、重新油漆、重新验证、失效等等。。。所有的教程都很简单。

共有1个答案

亢嘉茂
2023-03-14

“计时机制只是一个运行5分钟的循环,使用System.timeCurrentMillis进行计数”

那是行不通的。如果没有延迟,循环最终会阻止绘画发生,直到循环完成。

我建议你考虑使用一个javax.swing.定时器的动画。您可以在如何使用摇摆定时器了解更多信息

定时器的基本结构如下

Timer ( int delayInMillis, ActionListener listener )

其中,delayInMillis是“滴答声”之间的延迟时间,以毫秒为单位,listener提供执行的action,每delayInMillis毫秒调用一次。所以最终你会做一些类似的事情

Timer timer = new Timer (40, new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        for (Ball ball: balls) {
            ball.move();
            repaint();
        }
    }
});

你可以在这里看到一个完整的例子

 类似资料:
  • 我投降。几周来,我一直试图找出是什么阻止了我的代码的图形部分更新收到的串行数据。第一次用Java编程。我有大约15年的编程经验,我习惯于解决自己的问题,但这超出了这种策略的有效性。我的申请由两个文件组成。 一个文件来自RXTX项目,每秒捕获两次以多个数据包形式发送的串行数据。这就像一个魅力(花了一些时间),我可以看到捕获的数据是正确和稳定的。 另一个文件是图形文件,由大约80个菜单组成,最终用户可

  • 问题内容: 因此,我有一堂课,必须编写程序来制作Simon。我知道我的做法不一定是最好的方法,但是,他有一些晦涩的要求,所以这就是我这样做的原因。 我的程序即将完成,但是有一个主要问题。当我按下重设”按钮时,我调用了一种称为“重设”的方法,该方法又将计算机设置为 播放其第一步。 在此期间,将进行图形更新。 当我自己调用reset方法时,它可以按预期工作。当我按下reset按钮时,它会执行所有图形更

  • 我使用chart.js在我的网页上有一个BarChart。 我在其中添加了两个数据点 现在我想要更新那些条A和B,而不是删除它们并再次添加它们(我已经想好了如何做到这一点)。我想让它们垂直移动以适应它们的新值,但我无法找到如何访问图表中已经存在的数据。 没有什么比得上 其中第一个值将是存储数据的索引(F.E.)。 我该怎么做呢?

  • 假设你已经通过开放图协议的meta标签为你的网页设置了facebook图像,如下所示:

  • 我用基本的图形用户界面创建了一个小画板程序。我使用了画图组件方法。我想每毫秒更新正在绘制的图形。这样,用户可以在释放鼠标点击之前看到他们将要绘制的内容。例如,如果我正在绘制一个矩形,我想在绘制矩形时看到它。如果你不明白我到底在说什么,打开微软油漆,点击矩形工具。画一个矩形。注意它是如何持续更新的,而不是在释放鼠标后。我想一定有办法让它每毫秒更新我的图形。做这件事最好的方法是什么?抱歉,如果这是一个

  • 我对更动态的java摇摆编程很陌生。我当然以前用过常规的摇摆组件,比如,等等。 所以我试图用和制作一个非常基本的乒乓球游戏。我以前做过一个绘画项目,我成功了。 我的问题是,当程序运行时,图形会严重口吃。到目前为止,我只实现了球,它只是选择了一个随机的方向,并开始在面板中反弹。这很有效。但是,我只能看到球,如果我一直不断调整帧的大小,否则它会严重口吃,看起来很空白。在第一秒钟左右的时间里,你可以看到