如何以编程方式在Mac中隐藏Java应用程序?

时间:2014-02-13 20:29:49

标签: java macos swing

我正在为mac制作一个java应用程序。应用程序必须具有"自动隐藏"等于" Command + H"捷径。我试图在JFrame中使用setVisible(False)来做这件事。但它不起作用。我怎么能这样做?

这可能是代码:

void hide(){
   setNormalScreen(); //disable fullscreen mode
   //this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
   setVisible(false);
   this.setState(JFrame.ICONIFIED);
}

这就是我得到的: The main window

1 个答案:

答案 0 :(得分:0)

请参阅以下示例。您可以按照建议使用setVisible(false)通过Java代码隐藏它,然后当用户单击Dock中的应用程序时将调用appReOpened()事件。发生这种情况时,您只需拨打setVisible(true)即可。这应该模仿Command-H的行为。

请参阅下面的注释代码,了解更丑陋的解决方案。

public class Test extends JFrame implements ActionListener, com.apple.eawt.AppReOpenedListener {

    public static void main(String[] args) {
        Test frame = new Test();
        JButton test = new JButton("test");
        test.addActionListener(frame);

        com.apple.eawt.Application app = com.apple.eawt.Application.getApplication();
        app.addAppEventListener(frame);

        frame.getContentPane().add(test);
        frame.pack();
        frame.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        setVisible(false);

        //      try {
        //          Robot robot = new Robot();
        //          robot.keyPress(KeyEvent.VK_META);
        //          robot.keyPress(KeyEvent.VK_H);
        //          robot.keyRelease(KeyEvent.VK_H);
        //          robot.keyRelease(KeyEvent.VK_META);
        //      } catch (AWTException ex) {
        //          // TODO Auto-generated catch block
        //          ex.printStackTrace();
        //      }
    }

    @Override
    public void appReOpened(AppReOpenedEvent arg0) {
        setVisible(true);
    }
}