[英]How to close the active JFrame
我正在嘗試找到一種可以關閉活動JFrame的方法。
我無法使用frame.dispose();
,因為我在工具欄類中聲明了動作偵聽器,並且我要關閉的框架不是靜態的,而是在運行時聲明的。
我試過使用:
java.awt.Window win[] = java.awt.Window.getWindows();
for(int i=0;i<win.length;i++){
win[i].dispose();
}
盡管這樣做確實可行,但在某些情況下,即使看起來只有一個窗口打開,它也會關閉多個窗口,因此框架會根據用戶執行的操作多次閃爍打開和關閉。
對於我來說,完全重新創建我的問題將涉及發布大量與MCVE原則不符的代碼。
我希望有人會知道在acitveframe.dispose();模具中關閉活動框架的更簡單可靠的方法。 -我現在不是真正的解決方案!!
如果您嘗試獲取動作事件的來源的Window祖先,會發生什么? 即
@Override
public void actionPerformed(ActionEvent actionEvent) {
Component comp = (Component) actionEvent.getSource();
Window win = SwingUtilities.getWindowAncestor(comp);
win.dispose();
}
如果源不是組件,或者它不包含在頂級窗口中,則此方法將無效。
關於:
對於我來說,完全重新創建我的問題將涉及發布大量與MCVE原則不符的代碼。
我敢打賭,您可以創建和發布接近的內容。
我希望有人會知道關閉活動框架的更簡單可靠的方法
在循環中,您可以添加:
if (window.isActive())
// do something
或更簡單的方法是:
Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
另外,假設您的活動窗口是JFrame,而不是使用window.dispose()
,那么我將使用如下代碼:
WindowEvent windowClosing = new WindowEvent(frame, WindowEvent.WINDOW_CLOSING);
frame.dispatchEvent(windowClosing);
這將模擬用戶單擊“關閉”按鈕,這意味着您添加到框架的任何WindowListener也會被執行。 有關更多信息和想法,請參見關閉應用程序 。
聲明JFrame時,如果不能使用static ,請將它們聲明為final :
final JFrame f = new JFrame();
它將解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.