簡體   English   中英

我如何查找 swing 上是否打開了 window

[英]How do i find if a window is opened on swing

我的應用程序存在問題,用戶一次會打開多個 window。 我添加了 dispose() 方法來調用關閉 window。 現在我應該保持至少一個 window 一直打開,這樣應用程序就不會在沒有完全關閉的情況下隱藏。 如果您不明白,請閱讀以下場景:

我同時打開了 window A 和 window B。 現在我可以關閉 window A 或 Window B 但不能同時關閉兩者。 換句話說,window B 只有在 window A 打開時才允許關閉,反之亦然。 我如何在 swing 中做到這一點?

一種簡單的 windowManger 並不是很棘手,您所需要的只是

  • WindowListener 跟蹤它正在收聽的 Windows
  • 創建 windows 並注冊監聽器的定義位置
  • 使 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;
    }

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

創建一個 class,稱為WindowManager ,它管理 windows 的創建和處置。

例如,它可以保留當前打開的 windows 的計數,並且僅當有多個 windows“活動”時才允許處理操作,否則會顯示一條帶有JOptionPane的確認消息,告訴用戶“真的關閉?這將終止應用程序。 " 或類似的東西。

“棘手”的部分是您必須在整個WindowManager中執行這種與窗口相關的操作,否則一切都會搞砸。

不知道 Swing 是否內置了類似的東西,我從未見過這樣的場景。

在使用 window.isVisible() 關閉之前,只需檢查另一個 window 是否打開;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM