你一定要考虑WizardOfOdds非常有用的答案.正确使用
“The Application Menu”将有所帮助,并且很容易设置最小的
Info.plist开始.持久的文件菜单将允许您的应用程序在其他人关闭时打开一个新窗口.这个
answer链接到一个简单的
example.
虽然Apple的Human Interface Guidelines是您用户期望的绝佳指南,但您当然可以尝试使用您在问题中建议的方法.特别是,您可以在不可见窗口上尝试setLocation(Short.MIN_VALUE,Short.MIN_VALUE).此外,如果它发出最后一个可见窗口的关闭信号,您可能希望以某种特殊方式响应WindowEvent.
附录:当您的侦听器看到最后一个可见窗口关闭时,创建一个新的空应用程序窗口.或者,在屏幕上移动不可见窗口并使其可见,直到用户决定如何继续.
附录:Mac OS X有助于防止可见窗口形式在屏幕外移动,但很容易将不可见的窗口置于不稳定状态,如下所示.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
public class FrameTest extends JFrame {
private static FrameTest marco;
private static FrameTest polo;
private static class MyPanel extends JPanel {
public MyPanel() {
super(true);
final JToggleButton b = new JToggleButton("Test");
b.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (b.isSelected()) {
polo.setLocation(100, 100);
polo.setVisible(true);
}
else {
polo.setVisible(false);
polo.setLocation(Short.MIN_VALUE, Short.MIN_VALUE);
}
}
});
this.add(b);
}
}
public FrameTest(String title) {
super(title);
this.setLayout(new BorderLayout());
this.add(new MyPanel());
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
marco = new FrameTest("Marco");
marco.setLocationRelativeTo(null);
marco.setVisible(true);
polo = new FrameTest("Polo");
polo.setLocation(Short.MIN_VALUE, Short.MIN_VALUE);
}
});
}
}