在编写一个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)