Как я могу сделать полный экран в Java на OSX - PullRequest
8 голосов
/ 21 июля 2009

Я пытался и не смог использовать полноэкранный режим Java на основном дисплее системы OSX. Что бы я ни пробовал, я не могу избавиться от «яблочной» строки меню в верхней части дисплея. Мне действительно нужно закрасить весь экран. Кто-нибудь может подсказать, как избавиться от меню?

Я приложил пример класса, в котором обнаружена проблема - в моей системе меню все еще отображается, и я ожидаю увидеть полностью пустой экран.

import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class FullScreenFrame extends JFrame implements KeyListener {

    public FullScreenFrame () {
        addKeyListener(this);
        setUndecorated(true);
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

        if (gd.isFullScreenSupported()) {
            try {
                gd.setFullScreenWindow(this);
            }
            finally {
                gd.setFullScreenWindow(null);
            }
        }
        else {
            System.err.println("Full screen not supported");
        }

        setVisible(true);
    }

    public void keyTyped(KeyEvent e) {}
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {
        setVisible(false);
        dispose();
    }

    public static void main (String [] args) {
        new FullScreenFrame();
    }
}

Ответы [ 3 ]

12 голосов
/ 21 июля 2009

Я думаю, что ваша проблема здесь:

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

finally блоки выполняются всегда, поэтому в данном случае ваше окно на короткое мгновение становится полноэкранным (если это так), а затем немедленно покидает экран.

Кроме того, setVisible(true) не требуется, если вы ранее звонили setFullScreenWindow(this), согласно Javadocs .

Так что я бы изменил конструктор на это:

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);
    }
}
7 голосов
/ 15 ноября 2013

В OS X (10.7 и выше) лучше использовать собственный полноэкранный режим. Вы должны использовать:

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

где window - это окно (JFrame и т. Д.), Которое вы хотите сделать полноэкранным

0 голосов
/ 07 мая 2018

Это немного педантично, ответ состоит в том, чтобы полностью следовать учебному пособию, которое имеет основную часть и несколько более обширно, чем вписывается в пост. Приведенный выше пример не работает, поскольку в нем отсутствует validate(); и некоторый контент. Я подозреваю, что Учебник по Java не исчезнет в ближайшее время. Ниже приведена модифицированная версия

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();
    }
}
...