java - 添加内容窗格时正在创建新的 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();
}
}
解决方案
正如评论中所讨论的那样,您在更新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 中实现此解决方案的类。
推荐阅读
- flask - 在烧瓶中使用搜索表单进行分页
- wildfly - 为什么嵌入式 vaadin 14 组件不出现在 XHTML 页面上?
- amazon-s3 - S3 批量操作:通过批量操作 ui 创建对象标记失败
- java-native-interface - 如何编译 Swig 示例?
- python - 使用 to_csv 方法转换 DataFrame 后,我在计算机上找不到它
- java - 为什么我可以透过透明面看到不可见的网格面?
- javascript - 我想将我的所有表从我的数据库显示到 API
- r - 标记条形图ggplot的一部分
- python-3.x - 根据列表中变量的长度查找列表中的索引项
- scala - 使用 akka 流从 S3 消费文件时出现 TimeoutException