我正在开发一个使用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中设置双缓冲,但它没有帮助。你知道如何解决眨眼问题吗?
答案 0 :(得分:0)
如果通过眨眼你的意思是在你移除然后添加子面板时重新粉刷,那么我会尝试停止重新绘制,进行所有交换,然后重新绘制父面板。
可能是c.setVisible(false); <your swapping code>; c.setVisible(true);
会有帮助吗?
或创建一个子面板sc,您将对其添加可交换组件不可见,以便父面板始终保持可见状态。它可能是一个关于双缓冲问题的黑客应该已经解决了你的问题,但它值得一试。