如何在秋千上打开窗户时如何找到

时间:2011-05-04 22:34:29

标签: java windows swing action windowlistener

我的应用程序出现问题,用户一次只能打开多个窗口。我已经添加了dispose()方法来关闭窗口时调用。现在我应该始终保持至少一个窗口打开,以便应用程序不会在未完全关闭的情况下隐藏。如果您不理解,请阅读以下方案:

我有窗口A和窗口B同时打开。现在我可以关闭窗口A或窗口B,但不能同时关闭两者。换句话说,只有在窗口A打开时才允许窗口B关闭,反之亦然。我如何在秋千上做到这一点??

3 个答案:

答案 0 :(得分:16)

一种简单的windowManger并不是很棘手,只需要

  • WindowListener,用于保存正在收听的Windows的曲目
  • 用于创建窗口并注册侦听器的已定义位置
  • 让窗户无所事事地关闭并让听众负责决定是否关闭(除了最后一个之外都会这样做)

一些片段:

    // the listener (aka: WindowManager)
    WindowListener 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 WindowListener 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.addWindowListener(l);
        frame.pack();
        frame.setLocation(counter * 20, counter * 10);
        return frame;
    }

答案 1 :(得分:4)

只是一种可能的方法......

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

例如,它可以保留当前打开的窗口的 count ,并且只有在有多个窗口“活动”时才允许配置操作,否则显示带有{{1}的确认消息告诉用户“真的关闭?那会终止应用程序。”或类似的东西。

“棘手”部分是你必须在整个JOptionPane中进行与窗口相关的操作,否则一切都会搞砸。

Dunno如果Swing有这样的内置,我从来没有见过这样的场景。

答案 2 :(得分:1)

在关闭window.isVisible();

之前,只需检查其他窗口是否打开