我正在使用 Java3D 和 Jmol(它是 3D 化学结构的查看器)开发一个项目。我必须创建能够在结构的 Java3D 和 Jmol 表示之间切换的 View 。
我设法做到了,但是当我将 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)
我尝试在 JPanels 中设置双缓冲,但没有帮助。您知道如何解决闪烁问题吗?
最佳答案
如果闪烁意味着它在您删除然后添加子面板时正在重新绘制,那么我会尝试停止重新绘制,进行所有交换,然后启用父面板的重新绘制。
可能是
c.setVisible(false); <your swapping code>; c.setVisible(true);
会有帮助吗?
或者创建一个子面板 sc,您将在其中添加可交换组件使其不可见,以便父面板始终保持可见。这可能是双缓冲问题的破解方法,本来应该可以解决您的问题,但值得一试。
关于java - 交换 JPanel 内容时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13630978/