java - JFrame 的奇怪行为,屏幕有时全白

标签 java swing jframe paint

我正在编写一个程序,它会画一条线,然后复制它,将其旋转 90 度,并对整个图片一遍又一遍地执行相同的操作。 我的问题是,我使用的 JFrame 有时不会绘制第一条线,而是使整个框架变为白色。我找不到原因,有时有效,有时无效,完全是随机的。也许我并没有真正理解paint()方法是如何工作的。 这是我的代码中不起作用的部分:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;

public class WeirdThing extends JFrame {
static final int winWidth = 800;
static final int winHeight = 600;
boolean start;

public WeirdThing() {
    super("WeirdThing");
    start = true;
}

public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    if (start) {
        g2.setColor(Color.BLACK);
        g2.drawLine(winWidth / 2, winHeight / 2, winWidth / 2 + 5, winHeight / 2);
        start = false;
    }
    repaint();
}

public static void main(String[] args) {
    WeirdThing a = new WeirdThing();
    a.setDefaultCloseOperation(EXIT_ON_CLOSE);
    a.setSize(winWidth, winHeight);
    a.setVisible(true);
}

}

这是我得到的两个结果的图片: Wanted Result | Result I don't want

最佳答案

您在 paintrepaint 方法之间创建了循环依赖关系,这会阻止 Swing 更新 UI - 删除 repaint 方法

<小时/>

Swing 中的自定义绘制是通过重写 paintComponent 而不是 paint 来完成的。请记住调用 super.paintComponent(g)

关于java - JFrame 的奇怪行为,屏幕有时全白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283369/

相关文章:

java - 为什么要使用 java 容器?

java - (MP3) 如何在 Java 中计算字节位置

java - 如何用Java制作按钮绘画?

java - 如何在 Mac 上创建一个允许用户创建目录的 JFileChooser?

Java - 水平滚动的垂直 "FlowLayout"

java - Java Applet 中的键盘输入

java - Maven 对 Crystal 报表的依赖

java - 如何更改弹出布局的背景?

java - 需要了解的String、String常量池和String intern方法

java - 如何为对象分配特定的 int 值?