代码之家  ›  专栏  ›  技术社区  ›  Halo

在另一个JPanel中使用JPanel重新绘制问题

  •  2
  • Halo  · 技术社区  · 15 年前

    我在里面画形状 JPanel ,也在另一个主管道内 面板 . AT 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());
    
        }
    }
    

    当父母是 JEditorPane 具有 setEditable() 启用,它工作,我们可以看到形状,但当它是 面板 ,一毫秒后,我看到的只是空面板。

    4 回复  |  直到 13 年前
        1
  •  2
  •   camickr    15 年前

    在这种情况下 页面组件,小面板?这个 父面板不会绘制 它们的形状是吗?

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

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

        2
  •  3
  •   ultrajohn    15 年前

    你应该绘制到JPanel的图形对象,使其成为永久的…在你的例子中,这是 Graphics g

        3
  •  2
  •   Community CDub    8 年前

    ultrajohn 死了。你需要使用 Graphics 你已经通过了。请继续阅读为什么…

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

    在本例中,您使用的是多个graphics2d对象: g 传入 paintComponent 以及 getGraphics 打电话。

    重新粉刷的经理交给你了 G 在上面画画。注意:这不会在屏幕上绘制,而是在临时缓冲区上绘制(假设默认的双缓冲)。

    油漆组件 打电话给你,你正在绘制从 获取图形 各种各样的成分。这将绕过重新绘制管理器,直接绘制到无缓冲显示。

    什么时候? paintChildren 返回 重绘管理器 启动以处理更新双缓冲区。它在显示的缓冲区上绘制空白临时缓冲区,有效地擦除通过 获取图形

        4
  •  0
  •   Joonas Pulakka    15 年前

    可能是那个 paintChildren paintBorder 透支你在方法中画出的任何东西。也许试着超越 paint 相反。在那里,您可以完全控制将在组件上绘制的内容,并且可以决定是否进一步调用 paintComponent , 画童 油漆边界 完全。