我正在编写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
..
}
}
答案 0 :(得分:3)
有人可以告诉我,我怎么能这样做,以便一旦新的框架 即将打开旧框架关闭..
使用CardLayout
,然后没有理由使用Top-Level Container
s,将所需数量JPanels
放入,然后只需切换JPanel视图
通知@trashgod
,非常不错,方式
否则必须清理(删除所有内容)无用容器,because Top-Level Containers never will be GC'ed
答案 1 :(得分:1)
那么,取决于用例,但是不是关闭旧的,而是创建新的,你可以关注现有的(并且可能更新数据?)。
您的控制器可以管理帧并跟踪它。以最简单(也不推荐)的方式,你有一个布尔“isFrameOpen”。如果打开框架,则将其设置为true;如果关闭框架,则将其设置为false(您的框架必须与控制器通信,或者控制器必须至少知道框架的状态)。如果boolean为true,则焦点/重新创建它。如果为false,请创建一个新的。
在更高级的解决方案中,您可以使用地图跟踪所有帧,并且您必须谨慎处理并发访问。
- TB