Java Applet,重绘 60 次/秒方法和多边形

标签 java eclipse applet

我有一个每秒重新绘制 60 次的运行方法,并且我有一个包含 4 个多边形的绘制方法。还有4个按钮。当您按第一个按钮时,多边形将按顺序排列,红色多边形位于顶部,当您按第二个按钮时,多边形交换,然后绿色位于顶部,其他多边形位于其后面。在 Eclipse 上一切都很好并且工作正常,但是当我在终端小程序查看器中运行它时,多边形不会停止并不断刷新。我怎样才能做出这样的声明:在单击按钮时以 60 次/秒的速度重新绘制所有内容,但只绘制一次多边形。

public void run() {
    long lastTime = System.nanoTime();
    double ns = 1000000000.0 / 1.0;
    double delta = 0;
    requestFocus();
    while (running) {
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while (delta >= 1) {
            delta--;
            update();
            repaint();
            validate();

        }
    }
}

以及绘制方法

    public void paint(Graphics g) {
            // gives sharper graphics
            g2 = (Graphics2D) g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            windows.drawRact(new Color(0xa0, 0xd1, 0xe3), g2);
    if (mlistener.firstWin) {

                add(analisysBtn);
                add(button_1);
                add(LoadFileButton);
                ifFirst = true;
                ifFirst2 = true;
                ifFirst3 = true;

                test2 = 0;
                test3 = 0;
                test4 = 0;
                windows.drawCompareWindow(g2);
                windows.drawFourthWindow(g2);
                windows.drawThirdWindow(g2);
                windows.drawSecondWindow(g2);
                windows.drawFirstWindow(g2);
}
    }

最佳答案

您正在通过 paint(Graphics g) 方法向 GUI 添加组件,这是您永远不应该做的事情。这个方法会被重复调用,很多次超出了你的控制范围,而且它需要非常快。因此,不应包含任何程序逻辑、GUI 结构更改以及长时间运行的代码。

顺便说一句,使用 Swing 并重写 JPanel 的 paintComponent(Graphics g) 方法会比直接在顶级窗口中重写 Paint 方法要好得多。

此外,您应该始终记住在重写中调用 super 方法(通常作为第一个方法调用),以允许组件执行其内务绘制。

此外,我会使用 Swing Timer 而不是 while (true) 循环来运行我的动画循环。

关于Java Applet,重绘 60 次/秒方法和多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290776/

相关文章:

java - 包含 Java 项目作为库

java - 将小程序与多个类一起使用

Java - 如何访问打包在 applet jar 中的图像

java - 无法从jms队列接收消息

java - 请使用Java中的多线程

java - 让Eclipse识别普通源文件和测试源文件的区别

java - 签名证书和 SSL

java - 结果集和语句未在 Java 中关闭的影响

java - J按钮 : actionPerformed while invisible/disabled?

eclipse - 在 maven 项目中运行 scala 应用程序