我正在使用Java3D和Jmol(它是3D中化学结构的查看器)的项目。我必须创建能够在Java3D和Jmol表示结构之间切换的视图。交换JPanel内容时闪烁
我已经设法做到了这一点,但是当我将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中设置双缓冲,但它没有帮助。你有什么想法如何解决闪烁的问题?
看来我还需要一台Windows PC来运行该代码(我的Mac没有C:/驱动器)。这就是说,看看'CardLayout'类设计用于在不同视图之间切换 – Robin
@Robin它只是j3dcore-ogl.dll文件(Java3D安装)的路径。如果你将它交换到Mac路径,它可能会工作(或者你根本不需要这个 - 也许这只是我的配置问题)。 我按照你的建议改变了布局,但我仍然闪烁。代码现在改变我的面板的内容是这样的(我不知道,如果你可以用它做更多的事情): \t'公共静态无效changeView(JPanel中C){ \t \t CardLayout CL =(CardLayout)c.getLayout ();如果(var){ } \t \t if(var)cl.show(c,“canvas”); (c,“jmol”);其他{ \t}其他{ \t \t} \t \t var =!var; \t}' – lasjak
如果我记得正确(它开始一段时间),3D画布往往是沉重的重量组件。闪烁可能是批量重和轻重量组件之间的转换,如果是这样,可能没有任何人可以做。确保您在I内切换组件。EDT – MadProgrammer