我正在嘗試在我的 Java JFrame 應用程式中實作“退出圖示化”行為,就像大多數原生 macOS 應用程式一樣,但我很困惑。
我試過做
Window.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent Event) {
System.out.println("Closed on macOS, iconifiying");
Window.setExtendedState(Frame.ICONIFIED);
}
});
并在退出時關閉視窗(以及添加一個呼叫 setVisible(false) 的視窗偵聽器)
Window.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
前者不起作用,因為它看起來像最小化并創建了 2 個單獨的圖示。后者沒有,因為我找不到一種方法來檢測何時單擊停靠欄圖示以取消隱藏視窗。如果我能弄清楚如何這樣做,我更喜歡這種方法。有人知道怎么做嗎?
uj5u.com熱心網友回復:
哦,我忘了具體說明我試圖模仿的行為到底是什么。當您在 macOS 上按下退出按鈕時,該視窗將不可見。當您單擊 Dock 中的應用程式圖示時,視窗應該再次可見。
你真的應該閱讀JavaDocs,那一點點谷歌搜索讓我想到了這個簡單的例子......
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.desktop.AppReopenedEvent;
import java.awt.desktop.AppReopenedListener;
import java.awt.desktop.QuitStrategy;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Test {
public static void main(String[] args) {
new Test();
Desktop.getDesktop().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Desktop.getDesktop().addAppEventListener(new AppReopenedListener() {
@Override
public void appReopened(AppReopenedEvent e) {
frame.setVisible(true);
}
});
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setBorder(new EmptyBorder(32, 32, 32, 32));
setLayout(new GridBagLayout());
add(new JLabel("Now you see me"));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399743.html
