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