交换JPanel内容时闪烁

时间:2012-11-29 17:06:40

标签: java swing jpanel java-3d

我正在开发一个使用Java3D和Jmol的项目(它是3D化学结构的查看器)。我必须创建能够在结构的Java3D和Jmol表示之间切换的视图。

我已设法做到这一点,但是当我用JmolPanel和Canvas3D交换JPanels时,我的交换区域会闪烁。

我只是简单地交换面板:

public static void changeView(JPanel c) {
     c.removeAll();
    if (var) {
        c.add(canvas);
    } else {
        c.add(jmolPanel);
    }
    c.revalidate();
    var = !var;
}

可以在此处找到创建包含用于交换面板按钮的框架的代码示例:http://pastebin.com/3F2gKBgb

要运行此示例,您需要Jmol.jar(可在此处找到http://jmol.sourceforge.net/download/)和Java3D(http://java3d.java.net/binary-builds.html)

我尝试在JPanels中设置双缓冲,但它没有帮助。你知道如何解决眨眼问题吗?

1 个答案:

答案 0 :(得分:0)

如果通过眨眼你的意思是在你移除然后添加子面板时重新粉刷,那么我会尝试停止重新绘制,进行所有交换,然后重新绘制父面板。

可能是 c.setVisible(false); <your swapping code>; c.setVisible(true); 会有帮助吗?

或创建一个子面板sc,您将对其添加可交换组件不可见,以便父面板始终保持可见状态。它可能是一个关于双缓冲问题的黑客应该已经解决了你的问题,但它值得一试。