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

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

慕斯王
浏览 172回答 2
2回答

莫回无

这个问题很简单 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 中定义):

慕侠2389804

setVisible()可以重复调用!不用那么麻烦,用JDialog就可以,利用JDialog对象的setModal(true)方法就可以达到你要的效果,而且你也不用考虑dispose,因为它非常好用
打开App,查看更多内容
随时随地看视频慕课网APP