使用另一个JPanel中的JPanel重绘问题
我正在绘制此JPanel
中的形状,这也在另一个主JPanel
内。在repaint()
它只绘制一毫秒的形状,然后消失。他们不留画,为什么?使用另一个JPanel中的JPanel重绘问题
我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
,一毫秒后,我看到的是空的面板。
在这种情况下会发生什么那些 pageComponents,小JPanels获得?父母面板 是不是要画他们的形状 是吗?
我不确定我是否接受您的评论。你的主面板应该包含子面板。应使用布局管理器将子面板添加到主面板。然后,当Swing决定重新绘制主面板时,它还会重新绘制所有子面板,然后子面板将重新绘制这些形状。
它的价值Custom Painting Approaches有一个在面板上绘制形状的工作示例。
我的意思是我想要的形状不是在主面板,但孩子,所以,当我改变其中一个小JPanels的坐标图也会改变位置,或者当我移除其中一个JPanel时,图形也会分解(BG-SoA)。 – Halo 2010-03-09 17:16:19
那么,这正是我所描述的,每个子面板的paintComponent()方法都是自定义的。然后,当您将子面板添加到父级时,该子级的绘制会自动完成。 – camickr 2010-03-09 17:45:10
我明白,然后定制他们的油漆我想我还需要为子面板创建一个单独的类。因为我刚刚创建了JPanel的对象。没有等待会不会导致同样的问题呢? – Halo 2010-03-09 17:51:45
这可能是paintChildren
或paintBorder
透支你在你的方法中绘制的任何东西。也许尝试重写paint
。您可以完全控制组件上的内容,并且您可以自行决定是否继续致电paintComponent
,paintChildren
或paintBorder
。
我想我试过了,但没有奏效。谢谢 – Halo 2010-03-09 16:23:48
ultrajohn是死了。您需要使用已通过的Graphics
。请阅读原因......
Java 1.6引入了支持优化重新绘制请求的RepaintManager
。它对绘画有一些微妙的影响。
在这种情况下,您正在使用多个Graphics2D对象:将g
传递给paintComponent
并调用getGraphics
返回的值。
重绘管理器已交给您g
进行绘制。注意:这不会在屏幕上绘制,而是在临时缓冲区上(假设默认双缓冲)。
在paintComponent
调用中,您正在绘制从各个组件的getGraphics
获取的图形。这绕过重绘管理器并直接绘制到无缓冲的显示器。
当paintChildren
返回时,RepaintManager
开始处理更新双缓冲区。它绘制空白临时缓冲区在显示缓冲区,有效地消除了什么画过的图形对象从getGraphics
你试过重写** paint(Graphics g)**而不是** paintComponent(Graphics g)**? – Jack 2010-03-09 15:44:10
感谢您的建议插孔,但这不是问题。我想我试过 – Halo 2010-03-09 16:20:56