我如何find一个窗口打开在swing上

我的应用程序有问题,用户一次只能打开一个以上的窗口。 而且我添加了dispose()方法来closures窗口。 现在,我应该至less保持一个窗口打开,以便应用程序不会完全隐藏。 如果您不明白,请阅读以下scheme:

我有窗口A和窗口B同时打开。 现在我可以closures窗口A或窗口B,但不能同时closures。 换句话说,只有在窗口A被打开的情况下才允许窗口Bclosures,反之亦然。 我如何做到这一点在摇摆?

一个简单的windowManger是不是真的棘手,你需要的只是

  • Windowlistner,它跟踪它正在监听的Windows
  • 一个定义的地方来创建窗口并注册侦听器
  • 使窗户无所事事,并让听众负责是否关闭的决定(除了最后一个都会这样做)

一些片段:

// the listener (aka: WindowManager) Windowlistner l = new WindowAdapter() { List<Window> windows = new ArrayList<Window>(); @Override public void windowOpened(WindowEvent e) { windows.add(e.getWindow()); } @Override public void windowClosing(WindowEvent e) { if (windows.size() > 1) { windows.remove(e.getWindow()); e.getWindow().dispose(); } } }; // create the first frame JFrame frame = createFrame(l); frame.setVisible(true); // a method to create a new window, config and add the listener int counter = 0; private JFrame createFrame(final Windowlistner l) { Action action = new AbstractAction("open new frame: " + counter) { @Override public void actionPerformed(ActionEvent e) { JFrame frame = createFrame(l); frame.setVisible(true); } }; JFrame frame = new JFrame("someFrame " + counter++); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.add(new JButton(action)); frame.addWindowlistner(l); frame.pack(); frame.setLocation(counter * 20, counter * 10); return frame; } 

只是一个可能的方法…

创建一个类,称之为WindowManager ,它管理窗口的创建和处置。

例如,它可以保留当前打开的窗口的计数 ,并且只有当多于一个窗口“存活”时才允许进行处理操作,否则显示确认消息,并且使用JOptionPane告诉用户“真的关闭了?这会终止应用程序。 “ 或类似的东西。

“棘手”的部分是你必须在整个WindowManager做这种与窗口有关的操作,否则一切都会搞砸。

不知道如果Swing有这样的内置的东西,我从来没有见过这样的情况。

在关闭window.isVisible()之前,检查另一个窗口是否打开。