How can I do full screen in Java on OSX

前端 未结 3 1700
逝去的感伤
逝去的感伤 2020-12-14 23:12

I\'ve been trying and failing to use the java full screen mode on the primary display of an OSX system. Whatever I\'ve tried I can\'t seem to get rid of the \'apple\' menu

相关标签:
3条回答
  • 2020-12-14 23:20

    Thats a bit pedantic, the answer is to follow the tutorial completely, which has the essentials and is somewhat more expansive than would fit in a post. The above sample does not work because it is missing a validate(); and some content. I suspect the Java Tutorial will not disappear any time soon. Below is a modified version

    package test;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class FullScreenFrame extends JFrame implements KeyListener {
    
        public FullScreenFrame () {
            addKeyListener(this);
            setUndecorated(true);
            GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    
        if (gd.isFullScreenSupported()) {
            try {
                this.getContentPane().addKeyListener(this);
                this.getContentPane().setLayout(new BorderLayout());
                this.getContentPane().add("Center", new JLabel("Full Screen, back to normal in 10 seconds"));
                gd.setFullScreenWindow(this);
                validate();
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } finally {
                gd.setFullScreenWindow(null);
            }
        } else {
            System.err.println("Full screen not supported");
        }
    
    }
    
    public void keyTyped(KeyEvent e) {
        System.out.println("keyTyped:" +  e.getKeyChar() + "source:"  + e.getSource() );
    }
    public void keyPressed(KeyEvent e) {
        System.out.println("keyPressed:" + e.getKeyChar() + "source:"  + e.getSource() );
    }
    public void keyReleased(KeyEvent e) {
        System.out.println("keyReleased:" + e.getKeyChar() + "source:"  + e.getSource() );
           setVisible(false);
            dispose();
        }
    
        public static void main (String [] args) {
            new FullScreenFrame();
        }
    }
    
    0 讨论(0)
  • 2020-12-14 23:23

    On OS X (10.7 and higher), it is better to use the native fullscreen mode available. You should use:

    com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window,true);
    com.apple.eawt.Application.getApplication().requestToggleFullScreen(window);
    

    where window is the window (JFrame, etc) that you want to take fullscreen

    0 讨论(0)
  • 2020-12-14 23:32

    I think your problem is here:

    try {
            gd.setFullScreenWindow(this);
    }
    finally {
            gd.setFullScreenWindow(null);
    }
    

    finally blocks are always executed, so what happens here is that you window becomes full screen for a brief instant (if that) and then relinquishes the screen immediately.

    Also, setVisible(true) is not necessary when you have previously called setFullScreenWindow(this), according to the Javadocs.

    So I would change the constructor to this:

    public FullScreenFrame() {
        addKeyListener(this);
    
        GraphicsDevice gd =
                GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    
        if (gd.isFullScreenSupported()) {
            setUndecorated(true);
            gd.setFullScreenWindow(this);
        } else {
            System.err.println("Full screen not supported");
            setSize(100, 100); // just something to let you see the window
            setVisible(true);
        }
    }
    
    0 讨论(0)
提交回复
热议问题