为了账号安全,请及时绑定邮箱和手机立即绑定

有个问题,请问有什么办法可以防止窗体的重复实例化?

有个问题,请问有什么办法可以防止窗体的重复实例化?

慕斯王 2022-05-27 15:11:14
我知道dispose()一个窗体后,setVisible(true)能够将此窗体再次显示出来,但是问题是: s etVisible(true)再次显示窗体时,窗体的构造函数是否会被调用.如果不会被调用,那么有什么办法可以强制调用?还有一个问题,有什么办法可以防止窗体的重复实例化比如说我现在有个Button ,响应事件是new一个窗体,我要达到的效果是,如果再次点击这个Button,如果这个窗体正在屏幕上显示,则不实例新的,如果这个窗体已经被dispose(),则实例一个新的窗体. 注意:我的所有窗体都只有两个状态 未被dispose()的和被dispose()的,这里根本没有setVisible()的事,请回答者不要把setVisible拿进来说,希望我说清楚问题了,谢谢! 回答的符合题意的,50分奉上;照搬API描述的,讲这几个方法的作用的 就不用回答了 谢谢
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

这个问题很简单 
1.首先 一个窗体 如果dispose()以后,如果,用窗体对象.setVisible(true);能够显示的话,
说明你没设置窗体的默认关闭方式 。具体你可以看看 setDefaultCloseOperation();这个方法的API说明 。 如果,你没有设置窗体关闭方式 。 点击关闭窗体,或是程序调用dispose() 内部实现方式,都只是把窗体隐藏 == setVisible (false);

2. 构造方法,只能是通过 new 窗体对象来调用 。
引申上面的问题 。  如果你改变窗体默认关闭方式 手动设置 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
在窗体里 调用 dispose(); 就会完全关闭窗体 ,并释放窗体资源 (不能通过setVisible重新显示)

3. 这个很简单 。  你考虑单利模式 就行了 。把窗体类做成单利模式 。
单利模式的意义就是 ,在程序的运行时,类实例只会存在一个。 也就是说,只要你没释放这个类资源 。 它只存在一个。 

私有构造方法。。
定义静态内部实例。
提供公有静态 创建并返回实例的方法
以下资料,可以掠过。 以下为 setDefaultCloseOperation ()方法API解释。
-----------------------------------------------------------------------------------
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的 WindowListener 对象的 windowClosing 方法中处理该操作。
HIDE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册的 WindowListener 对象后自动隐藏该窗体。
DISPOSE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体。
EXIT_ON_CLOSE(在 JFrame 中定义):



查看完整回答
反对 回复 2022-05-30
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

setVisible()可以重复调用!
不用那么麻烦,用JDialog就可以,利用JDialog对象的setModal(true)方法就可以达到你要的效果,而且你也不用考虑dispose,因为它非常好用

查看完整回答
反对 回复 2022-05-30
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号