java - 重新打开 JFrame 时如何修复错误选择项?
问题描述
所以我的程序选择关闭并重新打开一个 JFrame,但是当我这样做时,每次我重新打开这个 JFrame 时,itens 都会成倍增加。我在我的代码中搜索并打开我正在使用的 JFrame:
Menu men = new Menu();
men.main(null);
所以菜单的JFrame,再次执行main并再次运行它以在Choice中添加itens:
entrada7.addItem("option 1");
entrada7.addItem("option 2");
entrada7.addItem("option 3");
为此,每次我重新打开时,都会创建越来越多的此类选项。我该如何解决?正在发生的事情的打印: https ://imgur.com/TeIg50V
解决方案
首先,您可能不应该按照您的方式重新打开JFrame 。您应该使用该setVisible
方法。例如,如果您使用按钮关闭 JFrame,请按以下方式调用该方法:
jframe.setVisible(false);
jframe 变量引用您唯一的 JFrame 实例的位置。
如果通过单击按钮或菜单项打开它,请测试 jframe 实例是否存在,如果不存在则创建它,否则将其可见性设置为 true。所以这看起来像:
if (jframe != null) {
jframe.setVisible(true);
} else {
// call your initial JFrame creation routine here
}
您还应该注意用户单击小左上角(或右上角,取决于操作系统)关闭按钮的情况。在这种情况下,您不希望 Jframe 被删除,而只是隐藏。因此,您应该在创建 JFrame 时定义其setDefaultCloseOperation行为。在这种特殊情况下,使用类似:
jframe.setDefaultCloseOperation(HIDE_ON_CLOSE);
当我们单击关闭按钮时,这会指示 Swing 隐藏 JFrame。
getItemCount() == 0
在任何情况下,如果您首先检查您的 JComboBox 在 ( ) 中是否没有项目,或者如果您removeAllItems()
在插入新项目之前显式调用该方法,则可以避免项目重复。
第一个选项如下所示:
if (entrada7.getItemCount() == 0) {
entrada7.addItem("option 1");
entrada7.addItem("option 2");
entrada7.addItem("option 3");
}
第二种选择是:
entrada7.removeAllItems();
entrada7.addItem("option 1");
entrada7.addItem("option 2");
entrada7.addItem("option 3");
在第一种情况下,项目将被添加一次且仅一次。在第二种情况下,如果项目已经添加,它们将在再次添加之前被删除。第一种选择当然更好。
推荐阅读
- bash - Bash 脚本因路径名中的空格而失败
- jupyterbook - jupyterbook 未被识别为内部或外部命令
- python - 有没有一种 Pythonic 方法来获取与失败的 dict 或 pandas 行分配相关的键?
- reactjs - Yarn tsc 显示合并后不再存在的错误
- sql - 查找最后两行的天差
- powershell - 将第一个参数传递给 cli
- javascript - 使用 JQuery 提交表单不会追加到列表
- mongodb - 如果聚合内的 mongodb 匹配不返回任何内容,如何进行新查询?
- asp.net - asp.net core - 发生异常时如何显示参数
- vb.net - VB.NET Count bits, 1 计为 1, 0 以 1 之间的顺序一起计数