在编写一个GUI的时候, 如果想控制按下一个控件打开一个新的窗口,但是这个窗口只能打开一次, 就是说, 不管按下这控件多少次, 如果窗口被打开了的话,那么就不再打开新的窗口了.
------------------------------------------------------------------------------------------------------------
实现方法:
开始以下面代码来测试,
if(UIManager.get("VEPJFrame_INSTNANCE") == null){
frame=new VEPJFrame("VEPs");
UIManager.put("VEPJFrame_INSTNANCE",frame);
frame.show();
}else{
((VEPJFrame)UIManager.get("VEPJFrame_INSTNANCE")).show();
}
//这样使用全局的UIManager的唯一的key属性可以控制只生成一个实例 但经过测试,发现点击窗口的关闭按钮时,只是隐藏了窗口实例,并没有销毁实例,所有当再次打开窗口时还是会弹出另一个窗口,经过不断测试,最后以一种折中的方式来处理,也就是每次打开第一个窗口时new一个实例,当再打开一个窗口时,判断之前的窗口是否关闭,若没关闭,则把它show()出来,若已经关闭,则重新new一个实例。此方法不能保证内存的回收,而只是把窗口隐藏起来而已。代码如下:
public void jMenuItemin_actionPerformed(ActionEvent e) {
//只打开一个窗口实例,使用全局的UIManager的唯一的key属性来控制只生成一个实例
if(UIManager.get("FrameProductIn_INSTNANCE") == null){
FrameProductIn dlg = new FrameProductIn (); UIManager.put("FrameProductIn_INSTNANCE", dlg);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.pack();
dlg.show();
System.out.println("new实例");
System.out.println(dlg.isShowing());
}
else{
System.out.println(((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).isShowing());
if(((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).isShowing()){
//((userQuery)UIManager.get("userQuery_INSTNANCE")).setFocusableWindowState(true);
((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).show();
System.out.println("显示原实例");
}
else{
FrameProductIn dlg = new FrameProduc
原文地址:http://www.myliAAAnux.com.cn/newsTextAction.do?id=6,395(去掉AAA)
------------------------------------------------------------------------------------------------------------
实现方法:
开始以下面代码来测试,
if(UIManager.get("VEPJFrame_INSTNANCE") == null){
frame=new VEPJFrame("VEPs");
UIManager.put("VEPJFrame_INSTNANCE",frame);
frame.show();
}else{
((VEPJFrame)UIManager.get("VEPJFrame_INSTNANCE")).show();
}
//这样使用全局的UIManager的唯一的key属性可以控制只生成一个实例 但经过测试,发现点击窗口的关闭按钮时,只是隐藏了窗口实例,并没有销毁实例,所有当再次打开窗口时还是会弹出另一个窗口,经过不断测试,最后以一种折中的方式来处理,也就是每次打开第一个窗口时new一个实例,当再打开一个窗口时,判断之前的窗口是否关闭,若没关闭,则把它show()出来,若已经关闭,则重新new一个实例。此方法不能保证内存的回收,而只是把窗口隐藏起来而已。代码如下:
public void jMenuItemin_actionPerformed(ActionEvent e) {
//只打开一个窗口实例,使用全局的UIManager的唯一的key属性来控制只生成一个实例
if(UIManager.get("FrameProductIn_INSTNANCE") == null){
FrameProductIn dlg = new FrameProductIn (); UIManager.put("FrameProductIn_INSTNANCE", dlg);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.pack();
dlg.show();
System.out.println("new实例");
System.out.println(dlg.isShowing());
}
else{
System.out.println(((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).isShowing());
if(((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).isShowing()){
//((userQuery)UIManager.get("userQuery_INSTNANCE")).setFocusableWindowState(true);
((FrameProductIn)UIManager.get("FrameProductIn_INSTNANCE")).show();
System.out.println("显示原实例");
}
else{
FrameProductIn dlg = new FrameProduc
原文地址:http://www.myliAAAnux.com.cn/newsTextAction.do?id=6,395(去掉AAA)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货