使用另一个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,一毫秒后,我看到的是空的面板。

+0

你试过重写** paint(Graphics g)**而不是** paintComponent(Graphics g)**? – Jack 2010-03-09 15:44:10

+0

感谢您的建议插孔,但这不是问题。我想我试过 – Halo 2010-03-09 16:20:56

在这种情况下会发生什么那些 pageComponents,小JPanels获得?父母面板 是不是要画他们的形状 是吗?

我不确定我是否接受您的评论。你的主面板应该包含子面板。应使用布局管理器将子面板添加到主面板。然后,当Swing决定重新绘制主面板时,它还会重新绘制所有子面板,然后子面板将重新绘制这些形状。

它的价值Custom Painting Approaches有一个在面板上绘制形状的工作示例。

+0

我的意思是我想要的形状不是在主面板,但孩子,所以,当我改变其中一个小JPanels的坐标图也会改变位置,或者当我移除其中一个JPanel时,图形也会分解(BG-SoA)。 – Halo 2010-03-09 17:16:19

+0

那么,这正是我所描述的,每个子面板的paintComponent()方法都是自定义的。然后,当您将子面板添加到父级时,该子级的绘制会自动完成。 – camickr 2010-03-09 17:45:10

+0

我明白,然后定制他们的油漆我想我还需要为子面板创建一个单独的类。因为我刚刚创建了JPanel的对象。没有等待会不会导致同样的问题呢? – Halo 2010-03-09 17:51:45

这可能是paintChildrenpaintBorder透支你在你的方法中绘制的任何东西。也许尝试重写paint。您可以完全控制组件上的内容,并且您可以自行决定是否继续致电paintComponentpaintChildrenpaintBorder

+0

我想我试过了,但没有奏效。谢谢 – Halo 2010-03-09 16:23:48

你应该画在JPanel的图形对象上,才能永久......在你的榜样,那就是Graphics g ...

+0

我马上试试 – Halo 2010-03-09 16:21:54

+0

,但等一下。在这种情况下,这些pageComponents(小JPanels)会发生什么?家长面板不会在他们身上画出形状吗?那么他们现在是无用的吗? – Halo 2010-03-09 16:34:40

ultrajohn是死了。您需要使用已通过的Graphics。请阅读原因......

Java 1.6引入了支持优化重新绘制请求的RepaintManager。它对绘画有一些微妙的影响。

在这种情况下,您正在使用多个Graphics2D对象:将g传递给paintComponent并调用getGraphics返回的值。

重绘管理器已交给您g进行绘制。注意:这不会在屏幕上绘制,而是在临时缓冲区上(假设默认双缓冲)。

paintComponent调用中,您正在绘制从各个组件的getGraphics获取的图形。这绕过重绘管理器并直接绘制到无缓冲的显示器。

paintChildren返回时,RepaintManager开始处理更新双缓冲区。它绘制空白临时缓冲区在显示缓冲区,有效地消除了什么画过的图形对象从getGraphics

+0

感谢您的解释,我会在晚餐后尝试。 – Halo 2010-03-09 16:22:24

+0

@Devon_C_Miller,我想你说我已经死了...... :) – ultrajohn 2017-02-18 05:47:36

+0

对不起@ultrajohn,我的错!我被你的数据包上的8年RTT愚弄了;-) – 2017-02-21 22:03:11