不允许相同的JFrame打开两次或更多次

时间:2014-02-19 18:33:12

标签: java swing

当我选择其中一个项目时,我创建了JComboBox,它会启动JFrame

但即使JFrame已经启动,如果再次选择相同的项目,它也会再次启动。

我怎么会允许它只在同一时间打开一次。

谢谢:)

2 个答案:

答案 0 :(得分:0)

我认为您需要使用自定义 JDialogs 而不是Jframe,它不允许来自其他窗口或对话框的用户输入。有关更多信息和源代码,请参阅Oracle website

此外,您可以在类中使用静态Jframe变量,该变量将保存由事件创建的Jframe实例,但不是编码的好方法

    //global jframe variable
    class Globals{
     public static myFrame myFrameOpenedInstance=null;
    }


// By invoking the event method returns same instance
     method duringEventOccured()
     {
      if(Globals.myFrameOpenedInstance==null){
      myFrame newFrameInstance=new myFrame();
      Globals.myFrameOpenedInstance=newFrameInstance;
      newFrameInstance.setVisible(true);
      }
     else{
      myFrame newFrameInstance=Globals.myFrameOpenedInstance; 
      newFrameInstance.setVisible(true);
    }

 }

答案 1 :(得分:0)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Tester extends JFrame {
  boolean i = true;

  public Tester() {
    setVisible(true);
    pack();
    JComboBox box = new JComboBox();
    box.addItem("One");
    box.addItem("Two");
    box.addItem("Three");
    box.addItem("Four");

    box.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        if (i) {
          final JFrame s = new JFrame();
          s.setVisible(true);
          s.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent) {
              i = true;
              s.setEnabled(false);
            }
          });

        }
        else {
          System.out.print("\n alredy opende");
        }
        i = false;
      }
    });
    getContentPane().add(box);
  }

  public static void main(String[] args) {
    Tester tester = new Tester();
  }
}

这个演示示例哪个示例对您有帮助。我们添加Windows Listener以及布尔变量来识别已经打开的窗口。enter image description here