首页 > 解决方案 > 重新打开 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

标签: javaswingjframechoice

解决方案


首先,您可能不应该按照您的方式重新打开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");

在第一种情况下,项目将被添加一次且仅一次。在第二种情况下,如果项目已经添加,它们将在再次添加之前被删除。第一种选择当然更好。


推荐阅读