Как я могу сделать полный экран в Java на OSX
Я пытался и не смог использовать полноэкранный режим 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 ответа
Я думаю, что ваша проблема здесь:
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);
}
}
На OS X (10.7 и выше) лучше использовать собственный полноэкранный режим. Вы должны использовать:
com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window,true);
com.apple.eawt.Application.getApplication().requestToggleFullScreen(window);
где window
это окно (JFrame
и т. д.) что вы хотите сделать полноэкранным
Это немного педантично, ответ заключается в том, чтобы полностью следовать учебному пособию, которое имеет основополагающее значение и несколько более обширно, чем вписывается в пост. Приведенный выше пример не работает, потому что отсутствует 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();
}
}