簡體   English   中英

如何關閉活動的JFrame

[英]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.

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