2

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

我已经设法做到了,但是当我将 JPanel 与 JmolPanel 和 Canvas3D 交换时,交换区域会闪烁。

我只是通过以下方式交换面板:

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)

我尝试在 JPanel 中设置双缓冲,但没有帮助。您知道如何解决闪烁问题吗?

4

1 回答 1

0

如果通过闪烁表示在删除然后添加子面板时它正在重新绘制,那么我会尝试停止重新绘制,进行所有交换,然后启用父面板的重新绘制。

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

或创建一个子面板 sc,您将使其不可见,您将在其中添加可交换组件,以便父面板始终保持可见。这可能是对双缓冲问题的一种破解,应该从一开始就解决了你的问题,但值得一试。

于 2012-11-29T17:58:04.973 回答