Java JPanel repaint()问题?

时间:2014-06-24 06:40:05

标签: java swing user-interface jpanel components

我是GUI的新手。我创建了这个简单的应用程序,每按一次按钮就会绘制一个不同颜色的椭圆。但是当我调用JPanel的{​​{1}}时,它不仅重新绘制面板的框架部分(椭圆形)。相反,它重新绘制整个框架,它还绘制了我在框架顶部(北部边界)单击的按钮。我知道我可以简单地调用repaint()的{​​{1}}来解决这个问题,但我只是想知道为什么会这样。我认为JFrame所做的只是调用对象的repaint()。 有人可以解释为什么这样做? 谢谢!

repaint()

1 个答案:

答案 0 :(得分:2)

确保您正在呼叫super.paintComponent准备Graphics上下文以进行绘画

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g)
    int red = (int) (Math.random() * 255);
    int green = (int) (Math.random() * 255);
    int blue = (int) (Math.random() * 255);
    g.setColor(new Color(red, blue, green));
    g.fillOval(20, 30, 50, 50);
 }

它的长短是Graphics上下文是共享资源。在绘制周期中绘制的每个组件都将共享相同的Graphics上下文,这意味着之前绘制的任何组件仍将存在。每次调用Graphics时,您都需要清除/准备paintComponent上下文。

这基本上是paintComponent所做的......