如何在打开新帧时关闭上一帧

时间:2012-10-25 15:59:11

标签: java swing model-view-controller jframe

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

2 个答案:

答案 0 :(得分:3)

  

有人可以告诉我,我怎么能这样做,以便一旦新的框架   即将打开旧框架关闭..

  • 使用CardLayout,然后没有理由使用Top-Level Container s,将所需数量JPanels放入,然后只需切换JPanel视图

    < / LI>
  • 通知@trashgod,非常不错,方式

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

答案 1 :(得分:1)

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

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

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

- TB