2

我正在编码 MVC。在我的控制器中,我正在收听动作,如果用户单击“SHOW-LIST”按钮,我正在创建从 JFrame 扩展的视图类的实例,并且在其中我创建一个新的 JFrame 视图类。我的问题是,如果我多次单击 SHOW-LIST 按钮,我会多次打开框架。有人可以告诉我我该怎么做才能在新框架即将打开时关闭旧框架..

控制器

public void actionPerformed(ActionEvent event) {
  String viewAction = event.getActionCommand();
  ...
    if (viewAction.equals("SHOW-LIST")) {
      showListUI = new ShowListDialogUI(displayedCustomerList);
    }
}

看法

class ShowListDialogUI extends JFrame{
  public ShowListDialogUI (List<Customer> customerList) {
    ..
    // I am drawing it here
    ..
  }
}
4

2 回答 2

3

有人可以告诉我我该怎么做才能在新框架即将打开时关闭旧框架..

  • 使用CardLayout,然后没有理由玩Top-Level Containers,放在那里需要的数量JPanels,然后只是在 JPanel 视图之间切换

  • @trashgod通知,真的不是好主意,方式

  • 否则必须清理(删除所有内容)无用的容器,因为顶级容器永远不会被 GC'ed

于 2012-10-25T16:28:54.127 回答
1

好吧,取决于用例,但不是关闭旧的并创建新的,您可以关注现有的(并且可能更新数据?)。

您的控制器可以管理帧并跟踪它。以最简单(但不推荐)的方式,您有一个布尔值“isFrameOpen”。如果您打开框架,则将其设置为 true,如果您关闭框架,则将其设置为 false(然后您的框架必须与控制器通信,或者控制器必须至少知道框架的状态)。如果 boolean 为真,则聚焦/重新创建它。如果为假,则创建一个新的。

在更高级的解决方案中,您可以使用地图跟踪所有帧,并且必须小心处理并发访问。

--待定

于 2012-10-25T16:12:38.110 回答