TITLE:Windowのフルスクリーン化
#navi(../)
*Windowのフルスクリーン化 [#kfe10736]
Posted by [[terai]] at 2008-04-28

#contents

**概要 [#u34e48bf]
JDialogやJFrameなどを、フルスクリーン表示に切り替えます。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#adab7743]
#code{{
private void toggleFullScreenWindow() {
  GraphicsEnvironment graphicsEnvironment
    = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice graphicsDevice
    = graphicsEnvironment.getDefaultScreenDevice();
  if(graphicsDevice.getFullScreenWindow()==null) {
    dialog.dispose(); //destroy the native resources
    dialog.setUndecorated(true);
    dialog.setVisible(true); //rebuilding the native resources
    graphicsDevice.setFullScreenWindow(dialog);
  }else{
    graphicsDevice.setFullScreenWindow(null);
    dialog.dispose();
    dialog.setUndecorated(false);
    dialog.setVisible(true);
    dialog.repaint();
  }
  requestFocusInWindow();
}
}}

**解説 [#f039da11]
上記のサンプルは、JDialogをフルスクリーン表示とウィンドウ表示に切り替えることが出来ます。

- F11キー、ダブルクリック
-- フルスクリーン表示、ウィンドウ表示の切り替え
- ESCキー
-- アプリケーション終了

----
フルスクリーン表示とウィンドウ表示を切り替える前に、タイトルバーの非表示、表示もsetUndecoratedメソッドで切り替えていますが、このメソッドを使用する前に一旦disposeしてウインドウのネイティブリソースを開放しておく必要があります。
- setUndecorated(boolean undecorated)は、ダイアログが表示されていないときにだけ呼び出すことができますが、この「表示されていない」は isVisible()ではなく、isDisplayable()がfalseの意味なので、dialog.setVisible(false); では、 「Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The dialog is ''displayable''.」 が発生します。
-- [[Window#dispose()>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Window.html#dispose()]]
-- [[Dialog#setUndecorated(boolean)>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Dialog.html#setUndecorated(boolean)]]
-- [[Component#isDisplayable()>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Component.html#isDisplayable()]]

----
Webstart(署名無し)から実行した場合、タスクバー(Windows)などを消してフルスクリーン化は出来ないようです。

**参考リンク [#e33e3400]
-[[Lesson: Full-Screen Exclusive Mode API >http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html]]

**コメント [#xe7709ed]
#comment