[英]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 並不是很棘手,您所需要的只是
一些片段:
// 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.