我已按照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,重新绘制了图像。但旧图像仍然存在。
如何解决这个问题?谢谢!
答案 0 :(得分:1)
调用super.paint()
。
public void paint(Graphics g) {
super.paint(g);
// ...
如果重新实现此方法,则应调用
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);
// ...
答案 1 :(得分:1)
super.paintXxx
paint
方法(例如JFrame
),而是使用JPanel
之类的方法覆盖它的paintComponent
方法。主要原因是; 1-顶级容器不是双缓冲的,这意味着在重新绘制组件时会出现闪烁。 2-您可以阻止其他内容被正确绘制(例如不要调用super.paint
。