我正在编写一个程序,它会画一条线,然后复制它,将其旋转 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
最佳答案
您在 paint
和 repaint
方法之间创建了循环依赖关系,这会阻止 Swing 更新 UI - 删除 repaint
方法
Swing 中的自定义绘制是通过重写 paintComponent
而不是 paint
来完成的。请记住调用 super.paintComponent(g)
。
关于java - JFrame 的奇怪行为,屏幕有时全白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283369/