有关多个模态框的弹出与销毁——丑九怪

本文探讨在编程中如何处理多个模态框的创建和销毁问题,强调使用独立线程避免相互影响。通过DialogFactory类管理DialogMap,存储每个模态框的名称和对象,确保正确关闭。核心代码展示了MyDialog和DialogFactory的实现,以及主界面的响应逻辑。

有关多个模态框的弹出与销毁——丑九怪

在编写代码的时候,我们很多情况下要用到模态框去阻止操作,或者说是等待某些代码执行完毕,那么势必就存在模态框的产生以及销毁问题,下面来看一些有关模态框的操作

  • 模态框的产生与关闭:用一个线程单独生成一个模态框,这样就不会影响我们之后的操作,相当于和其他线程并行,互不影响,当关闭的时候,首先检查模态框是否已经显示完成,如果显示完成,则进行关闭,如果未显示完成,用isShowing判断,直到显示完成,在进行关闭。原因是,如果我们直接关闭,可能会存在一种情况:关闭的条件提前达成,进行关闭,但是这个时候,模态框并没有显示出来(模态框显示的代码很多,存在不可忽略的运行时间)如果此时进行关闭操作,本模态框将永远无法关闭,这是不允许的。
  • 用一个线程去产生一个模态对话框还有另一个原因:如果存在同时弹出多个模态对话框的情况(例如每次点击可能触发多次显示模态框的事件响应)如果不用单独的线程处理,后面产生的模态框对象(指针)将覆盖前面的模态框对象,那么前面的模态框就永远关不掉了,这也是不允许的!
  • 为了处理多个模态框的同时显示和关闭,我建立了DialogFactory,其中DialogMap<String, MyDialog>,String是dialog的名字(自己命名的),MyDialog是每个模态对话框的对象,这里就相当于每产生一个模态对话框(一个对话框的显示线程),我们用键值对把他存起来,等到关闭的条件达成之后,根据键值取出对话框的对象,判断是否显示成功,然后关闭,这就形成了一个完整的体系。
  • 以下是干货,上代码:

这段代码是MyDialog(继承自JDialog)的核心代码,在show时,用线程启动

public MyDialog initMxlDialog(String message) {
		int width = (int) (message.length() * 1.5 * normalFontSize);
		int height = 80;
		
		setSize(width, hei
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值