首页 > 解决方案 > 添加内容窗格时正在创建新的 JFrame

问题描述

我不知道为什么,但是当我添加内容窗格时,它会创建一个新的 JFrame 窗口,而不是替换同一窗口上的旧内容窗格。谢谢,我的代码如下:我有一个public void(容器窗格)。这就是我要添加到 JFrame 中的内容。

public  void Start1(){       

    if (number==0){

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Set up the content pane.
    add(getContentPane());

    //Display the window.
    pack();
    setVisible(true); 
    setExtendedState(JFrame.MAXIMIZED_BOTH); 

    setVisible(true);
}
    else {
      add(getContentPane());

    //Display the window.
        pack();  
    }
}

标签: javajframe

解决方案


正如评论中所讨论的那样,您在更新ContentPane简单内容时面临的问题removeAll();repaint();足够了。内容窗格始终使用它的 JFrame 创建,如果您有其他选择,则不应将其删除。在您的情况下,您应该只更新您的内容窗格的组件。这是我遇到类似问题时提出的解决方案:

我在我的内容窗格中创建了一个 JPanel:

JPanel viewport = new JPanel();
viewport.setBackground(Color.WHITE);
viewport.setBounds(0, 302, 414, 420);
contentPane.add(viewport);
viewport.setLayout(null);

然后,每当我想更新该屏幕时,我将以下代码添加到方法/事件中:

viewport.removeAll();
viewport.repaint();

这将删除您拥有的每个组件并将其重新绘制到您的 JPanel。因此,如果您更新信息(或您想要更新的任何内容)然后运行这两个简单的方法,您的组件就会正确更新。

如果您有任何其他疑问,请查看我在 GitHub 中实现此解决方案的类。


推荐阅读