java - JVM如何调用Swing中的paint?

标签 java swing awt

我是 AWT/Swing 编程新手。我尝试绘制图像 100,000 次。 drawImage()方法的循环在paint()方法中。我发现 java 调用 paint() 方法的时候很不稳定。它可能在一个程序的运行时间内调用了两次paint()方法,而其他人可能调用了三次。如果我创建一个执行 repaint() 的按钮,它只会在我每次单击此按钮时调用一次 paint()

谁能告诉我何时调用 paint() 方法?我知道系统触发的绘画和应用程序触发的绘画。但我认为它不属于这些情况。

最佳答案

您可以使用另一个线程来调用repaint() 方法。一种简单的方法是让您的绘画类(java.awt.Canvas 或此处的 javax.swing.JPanel)实现 Runnable 并在构造函数中启动该线程。还要添加 run() 方法。

import javax.swing.*;

public class DrawPicktures extends JPanel implements Runnable
{
    public DrawPickture()
    {
        /* Code */
        new Thread(this).start();
    }

    public void Paint(Graphics g)
    {
        super.Paint(g); // Will draw all gui components added
        /* Code */
    }

    public void run()
    {
        while(true)
        {
            repaint();
            try
            {
                Thread.sleep(1000  /* Waits for 1000 milliseconds */);
            }
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

因为 JPanel(或 Canvas)将从另一个线程重新绘制,所以它不会阻塞您的主线程,因此您的程序可以同时做其他事情。

关于java - JVM如何调用Swing中的paint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18773654/

相关文章:

java - Android 中的 java 窗口分层

java - 如何处理 Java 方法中变量的类型泛型?

java - 软键盘覆盖 PopupWindow 中的 EditText

java - 如何使java形状以圆形动画?

java - AWT:创建图标时出现 NullPointerException

java - 无法跳出循环

java.lang.NoSuchMethodError : org. slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

java - 将 JFileChooser 添加到我的项目后,IntelliJ 调试器不会停止

Java-Swing 和 Windows 文本大小 : fix the size of components

java - 如何编辑转换为图像的文本?或任何其他实现/编辑文本的方法