【问题标题】:How to close a previous Frame when a new Frame is opened打开新框架时如何关闭前一个框架
【发布时间】:2012-10-26 03:09:04
【问题描述】:

我正在编写 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
    ..
  }
}

【问题讨论】:

标签: java swing model-view-controller jframe


【解决方案1】:

有人可以告诉我如何做到这一点,这样一旦一个新框架 即将打开旧框架关闭..

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

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

  • 否则必须清理(删除所有内容)无用的容器,because Top-Level Containers never will be GC'ed

【讨论】:

    【解决方案2】:

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

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

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

    --待定

    【讨论】:

    • 你提出的想法很好,虽然为什么要使用布尔变量,当JFrame本身从Window类中得到这个方法,叫做isShowing()。 +1 的想法,但不是你应用的技术 :-)
    • @GagandeepBali 我完全同意,这就是我写“(不推荐)”的原因:)它是为了易于理解。
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2015-12-30
    • 2022-11-14
    • 2013-01-22
    • 2019-03-17
    相关资源
    最近更新 更多