gpt4 book ai didi

java - 在 OSX : How to Trap command-Q? 上 Swing

转载 作者:IT老高 更新时间:2023-10-28 20:34:24 27 4
gpt4 key购买 nike

being convinced ("schooled") that Swing apps on Mac do look native 之后,我试图让我的看起来尽可能地原生。一切看起来都很棒,但是当我点击 command+Q 或从菜单中执行此操作时,我的 windowStateChanged(WindowEvent e) 没有在我的main JFrame(如果我以任何其他方式退出,它会触发)。我该如何回应真正的苹果退出?

最佳答案

你可以实现com.apple.eawt.ApplicationListener并响应 Quit 事件。可以在 Mac OS X 引用库 示例中找到一个示例,OSXAdapter .

附录:见 Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes有关弃用、重新设计的 com.apple.eawt.Application 类以及 Apple Java 扩展的 API 文档位置的信息。按住 Control 键单击或右键单击 .jdk 文件以 Show Package Contents。您可以浏览com.apple.eawt的类(class)在 OpenJDK 源中。

如此完整的example所示,您可以指定所需的退出策略; WindowListener 将响应 ⌘Q:

Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);

如上所述 here ,您可以从命令行设置属性

java -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS -cp build/classes gui.QuitStrategyTest

或在程序的早期,在发布任何 GUI 事件之前:

System.setProperty("apple.eawt.quitStrategy", "CLOSE_ALL_WINDOWS");
EventQueue.invokeLater(new QuitStrategyTest()::display);

image

控制台,在 ⌘Q 之后:

java.vendor: Oracle Corporation
java.version: 1.8.0_60
os.name: Mac OS X
os.version: 10.11
apple.eawt.quitStrategy: CLOSE_ALL_WINDOWS
java.awt.event.WindowEvent[WINDOW_CLOSING,opposite=null,oldState=0,newState=0] on frame0

代码:

package gui;

import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JTextArea;

/**
* @see https://stackoverflow.com/a/7457102/230513
*/
public class QuitStrategyTest {

private void display() {
JFrame f = new JFrame("QuitStrategyTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {
System.out.println(e);
}
});
f.add(new JTextArea(getInfo()));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

private String getInfo() {
String[] props = {
"java.vendor",
"java.version",
"os.name",
"os.version",
"apple.eawt.quitStrategy"
};
StringBuilder sb = new StringBuilder();
for (String prop : props) {
sb.append(prop);
sb.append(": ");
sb.append(System.getProperty(prop));
sb.append(System.getProperty("line.separator"));
}
System.out.print(sb);
return sb.toString();
}

public static void main(String[] args) {
System.setProperty("apple.eawt.quitStrategy", "CLOSE_ALL_WINDOWS");
EventQueue.invokeLater(new QuitStrategyTest()::display);
}
}

关于java - 在 OSX : How to Trap command-Q? 上 Swing ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2061194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com