【问题标题】:Java swing: Remanence when removing a heavyweight jogl component to add a lightweight component at the same placeJava swing:移除重量级 jogl 组件以在同一位置添加轻量级组件时的剩磁
【发布时间】:2011-02-23 16:02:52
【问题描述】:

在我的摇摆应用程序中,当我从主要组件中删除 jogl GLCanvas 以在同一位置添加 jPanel 时,有一些显示故障: 在移除旧组件和添加新组件之前,所有之前显示在 GLCanvas 顶部的弹出菜单的剩余图像在主要成分。

我怎样才能避免这种情况?

【问题讨论】:

    标签: java swing jogl


    【解决方案1】:

    在可见的 GUI 中添加/删除组件时,代码应如下所示:

    panel.remove(...);
    panel.add(...);
    panel.revalidate();
    panel.repaint();
    

    另外,代码应该在事件调度线程上执行。如果代码是从侦听器中执行的,那么它就在 EDT 上。如果代码在侦听器之外执行,那么您可能需要使用 SwingWorker 或 SwingUtilities.invokeLater()。

    【讨论】:

    • 我认为 revalidate 本身会组织必要的重绘,因此您不必也调用它。不过,更重要的部分是 EDT。
    • 有些时候重绘是绝对必要的,尤其是在移除组件时,所以很多时候重验证是不够的。
    • 抱歉,我的问题不够具体……我知道在 EDT 中需要这样做……将重量级的 jogl 组件与轻量级的摆动组件混合在一起是不够的。我已将我的问题编辑得更具体。
    猜你喜欢
    • 2010-09-29
    • 2011-11-15
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多