[英]Repaint issue with JPanel inside another JPanel
我正在这个JPanel
内部绘制形状,该JPanel
也在另一个主JPanel
内部。 在repaint()
它仅绘制形状一毫秒,然后它们消失。 他们没有画画,为什么?
我的paintComponent
方法是这样的
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < reportElements.size(); i++) {
this.reportElements.get(i).display((Graphics2D) pageComponents.get(i).getGraphics());
}
}
当父级是启用setEditable()
的JEditorPane
时,它可以工作,我们可以看到形状,但是当它是JPanel
,在一毫秒后,我看到的只是空面板。
您应该将其绘制为JPanel的Graphics对象,以使其永久...在您的示例中,这是Graphics g
...
Ultrajohn死了。 您需要使用已通过的Graphics
。 继续阅读为什么...
Java 1.6引入了RepaintManager
,它支持优化重画请求。 它对绘画有一些微妙的影响。
在这种情况下,您要使用多个Graphics2D对象:将g
传递给paintComponent
并由getGraphics
调用返回的值。
重绘经理递给你g
上作画。 注意:这不会在屏幕上绘制,而是在临时缓冲区上绘制(假定使用默认的双缓冲)。
在paintComponent
调用中,您正在绘制从各个组件的getGraphics
获得的图形。 这绕过了重新绘制管理器,直接绘制到无缓冲的显示。
当paintChildren
返回时, RepaintManager
启动以处理更新双缓冲区。 它在显示的缓冲区上绘制空白的临时缓冲区,从而有效擦除通过从getGraphics
获得的图形对象绘制的内容
在这种情况下,那些pageComponents(小的JPanels)会怎样? 父面板不会在其上绘制形状吗?
我不确定我是否理解您的评论。 您的主面板应包含子面板。 子面板应使用布局管理器添加到主面板。 然后,当Swing决定重新粉刷主面板时,它还将重新粉刷所有子面板,然后这些子面板将重新粉刷那里的形状。
自定义绘画方法有什么用,可以在面板上绘制形状。
可能是paintChildren
或paintBorder
重绘了您在方法中绘制的内容。 也许尝试改写paint
。 在那里,您可以完全控制将在组件上绘制的内容,并且可以决定是否进一步调用paintComponent
, paintChildren
或paintBorder
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.