すべての OS (Windows、Mac、Linux) で Java JFrame を全画面表示にする際に問題が発生しています。私が見つけた解決策は、あるOSでは実行されるが他のOSでは実行されないか、その他の深刻なバグがあるようです。メニューバーとタスクバーがまだ表示されているため、setExtendedState(...) が Mac/Linux では機能しないため、setFullScreenWindow(window w) メソッドを使用してフルスクリーンを適切に開始したかったのです。
setFullScreenWindow(...) メソッドは、Java 7 が登場するまではすべての環境で正常に機能していましたが、現在では、フルスクリーン モードに入るとすぐにアプリケーションが Mac OS X の主要なイベントに応答しなくなるという問題があるようです。アプリケーションは動作します。 Windowsでは問題ありません。
この問題を回避する方法を知っている人はいますか?
注: ここで説明する回避策 ( Mac OS X Mountain Lion の Java 7 で FullScreen Swing コンポーネントがキーボード入力を受信できない ) は Windows では機能しません。JFrame がちらつき、正しく開かないためです。
ここで説明するフルスクリーンのアプローチは、以下で使用されているものと同じですが、キー入力の問題のために機能しません: ( How to make a JFrame really fullscreen? )
コード例:
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class FullScreenKeyTest extends JFrame {
public void createFrame() {
initKey();
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
this.setUndecorated(true);
this.setVisible(true);
gd.setFullScreenWindow(this);
}
private void initKey() {
Action keyAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("Escape key pressed");
setVisible(false);
System.exit(0);
}
};
this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "keyPress");
this.getRootPane().getActionMap().put("keyPress", keyAction);
}
public static void main(String[] args) {
FullScreenKeyTest testFrame = new FullScreenKeyTest();
testFrame.createFrame();
}
}