我的应用程序有问题,用户一次只能打开一个以上的窗口。 而且我添加了dispose()方法来closures窗口。 现在,我应该至less保持一个窗口打开,以便应用程序不会完全隐藏。 如果您不明白,请阅读以下scheme:
我有窗口A和窗口B同时打开。 现在我可以closures窗口A或窗口B,但不能同时closures。 换句话说,只有在窗口A被打开的情况下才允许窗口Bclosures,反之亦然。 我如何做到这一点在摇摆?
一个简单的windowManger是不是真的棘手,你需要的只是
一些片段:
// 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()之前,检查另一个窗口是否打开。