1

すべての 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();
}
}
4

2 に答える 2

1

これは、動作させて同時に壊すことができるので、少し不安定です。

あなたのサンプルコードで、私は追加しました

getContentPane().setFocusable(true);
getContentPane().requestFocus();

メソッドの最後にcreateFrame、ルート ペインに対してアクションを登録する代わりに、コンテンツ ペインに対して登録しました。

于 2013-01-07T08:45:27.743 に答える
0

ネイティブの OS X Lion フルスクリーン API を使用すると、キーボード入力が機能することがわかりました。OSX Lion の Java アプリのフルスクリーン機能に関する質問の解決策を参照してください。

于 2013-10-08T23:33:01.753 に答える