java - 交换 JPanel 内容时闪烁

标签 java swing jpanel java-3d

我正在使用 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/

相关文章:

java - 尝试写入文件时出现 Broken Pipe 异常

java - kafka生产者单元测试(java)

java - WebSphere 中@PostConstruct 异常处理的行为

java - BufferyStrategy 返回错误

java - 使用 ActionListener 比较两个 JTextField

java - 键入的键事件不适用于键入的第一个键。 java

Java根据鼠标点击绘制三个形状?

java - 为什么java中的Object类中有public方法?

java - 打开两个面板

java - 更新 JPanel 的位置