0

我已经按照代码在JFrame.

package march_2013;

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

public class Question7 extends JFrame {

    public void paint(Graphics g) {
        int[] x = new int[] { 10, 60, 360, 410, 210, 210, 260, 210, 190, 160,
                190, 190 };
        int[] y = new int[] { 200, 250, 250, 200, 200, 180, 180, 100, 100, 160,
                160, 200 };
        g.drawPolygon(x, y, x.length);
        g.drawLine(190, 100, 190, 180);
        g.drawLine(210, 100, 210, 180);
    }

    public static void main(String[] args) {
        Question7 window = new Question7();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setBounds(440, 40, 420, 400);
        window.setVisible(true);
    }
}

它工作正常,提供以下输出。

在此处输入图像描述

但是我最大化了 JFrame,图像被重新绘制。但旧图像仍然存在。

在此处输入图像描述

如何解决这个问题呢?谢谢!

4

2 回答 2

1
  1. 你应该打电话super.paintXxx
  2. 您应该避免覆盖paint顶级容器(如JFrame)的方法,而是使用类似的东西JPanel并覆盖它的paintComponent方法。主要原因是;1- 顶级容器不是双缓冲的,这意味着当组件被重新绘制时你会得到闪烁。2-您可以防止其他内容被正确绘制(例如不调用super.paint.

查看AWT 和 Swing中的自定义绘画和绘画以了解更多详细信息

于 2013-05-26T03:48:45.053 回答
1

调用super.paint().

public void paint(Graphics g) {
    super.paint(g);
    // ...

油漆的API文档说:

如果重新实现此方法,super.paint(g)则应调用该方法以便正确呈现轻量级组件。

为了确保背景是白色的:

public void paint(Graphics g) {
    super.paint(g);
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(Color.BLACK);
    // ...
于 2013-05-26T03:26:14.413 回答