質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

1007閲覧

setUndecoratedを呼んだときにエラーが発生する

yukkuri

総合スコア624

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2018/10/06 03:20

前提・実現したいこと

JFrameを使っていて、フルスクリーン化をしようとしていました。
そこで、タイトルバーを消したかったのですが、その関数を読んだときエラーが発生しました。

発生している問題・エラーメッセージ

Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable. at java.awt.Frame.setUndecorated(Frame.java:923) at FrameTest.main(FrameTest.java:9)

該当のソースコード

呼び出し元クラス(main関数)

java

1 JylFrame jf = new JylFrame(); 2 jf.setUndecorated( false ); 3 jf.changefFullScreen(); 4 jf.setVisible( true );

JylFrame

java

1public class JylFrame extends JFrame 2{ 3 private short x = 0, y = 0; 4 private short width = 640, height = 480; 5 private String title = "frame"; 6 private boolean resize = false; 7 private float widthRate = 1.0f; 8 private float heightRate = 1.0f; 9 private Color background = new Color( 0xff000000, true ); 10 private boolean showsize = true; 11 private boolean fullscreen = false; 12 13 private GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 14 private GraphicsDevice gd = ge.getDefaultScreenDevice(); 15 private GraphicsConfiguration gc = gd.getDefaultConfiguration(); 16 17 public JylFrame() 18 { 19 super(); 20 initFrame(); 21 } 22 23 public JylFrame( String title ) 24 { 25 this(); 26 initFrame(); 27 setfTitle( title ); 28 } 29 30 /** 31 * フレームを初期の状態に戻します。 32 */ 33 public void initFrame() 34 { 35 setfTitle( "frame" ); 36 setfLocation( (short)0, (short)0 ); 37 setfSize( (short)640, (short)480 ); 38 setDefaultCloseOperation( EXIT_ON_CLOSE ); 39 setfBackground( 0xff000000 ); 40 setfResizable( false ); 41 } 42 43 /** 44 * このフレームの背景色を設定します。 45 * 46 * @param argb 背景色の ARGB 値 47 * 48 * @since Jyl - 1.0 49 */ 50 public void setfBackground( int argb ) 51 { 52 background = new Color( argb, true ); 53 setBackground( background ); 54 } 55 56 /** 57 * このフレームの背景色を設定します。 58 * 59 * @param c 背景色の Color 60 * 61 * @since Jyl - 1.0 62 */ 63 public void setfBackground( Color c ) 64 { 65 background = c; 66 getContentPane().setBackground( c ); 67 } 68 69 public void changefFullScreen() 70 { 71 if( !fullscreen ){ 72// setUndecorated( false ); 73 gd.setFullScreenWindow( this ); 74 }else{ 75// setUndecorated( true ); 76 gd.setFullScreenWindow( null ); 77 } 78 fullscreen = !fullscreen; 79 } 80 81 /** 82 * このフレームの位置を設定します。 83 * 84 * @param x フレームの位置 85 * @param y フレームの位置 86 * 87 * @since Jyl - 1.0 88 */ 89 public void setfLocation( short x, short y ) 90 { 91 this.x = x; this.y = y; 92 93 setLocation( this.x, this.y ); 94 } 95 96 public void setfLocationCenter() 97 { 98 setfSize( width, height ); 99 setLocationRelativeTo( null ); 100 } 101 102 /** 103 * このフレームのリサイズ可否を設定します。 104 * 105 * @param resizable フレームのリサイズを許可する場合 { @code true} 106 */ 107 public void setfResizable( boolean resizable ) 108 { 109 this.resize = resizable; 110 setResizable( resize ); 111 } 112 113 /** 114 * このフレームの描画範囲を推奨サイズに設定します。 115 * 116 * @param width このフレームのサイズ 117 * @param height このフレームのサイズ 118 * 119 * @since Jyl - 1.0 120 */ 121 public void setfSize( short width, short height ) 122 { 123 this.width = width; this.height = height; 124 short framewidthsize = (short)( this.width * widthRate ); 125 short frameheightsize = (short)( this.height * heightRate ); 126 127 getContentPane().setPreferredSize( new Dimension( framewidthsize, frameheightsize ) ); 128 pack(); 129 130 setfBackground( background ); 131 setfTitle( title ); 132 } 133 134 /** 135 * このフレームの描画範囲を現在のサイズを基にして設定します。 136 * 137 * @param widthr 横幅の比率 138 * @param heightr 高さの比率 139 * 140 * @since Jyl - 1.0 141 */ 142 public void setfSizer( float widthr, float heightr ) 143 { 144 this.widthRate = widthr; this.heightRate = heightr; 145 short framewidthsize = (short)( width * widthRate ); 146 short frameheightsize = (short)( height * heightRate ); 147 148 getContentPane().setPreferredSize( new Dimension( framewidthsize, frameheightsize ) ); 149 pack(); 150 151 setfBackground( background ); 152 setfTitle( title ); 153 } 154 155 /** 156 * このフレームのタイトルを設定します。引数を {@code "frame"}、640*480とすると、<br> 157 * タイトルは {@code frame 640x480} となります。 158 * 159 * @param title フレームのタイトル 160 * 161 * @since Jyl - 1.0 162 */ 163 public void setfTitle( String title ) 164 { 165 this.title = title; 166 short framewidthsize = (short)( width * widthRate ); 167 short frameheightsize = (short)( height * heightRate ); 168 String newtitle = showsize == true ? this.title + " " + framewidthsize + "x" + frameheightsize : this.title; 169 170 setTitle( newtitle ); 171 } 172 173 /** 174 * タイトルにフレームサイズを表示するか設定します。 175 * 176 * @param show フレームサイズを表示する場合 {@code true} 177 * 178 * @since Jyl - 1.0 179 */ 180 public void setShowSize( boolean show ) 181 { 182 showsize = show; 183 setfTitle( this.title ); 184 } 185}

試したこと

javaのAPIを読んだり、ネットで調べました。
呼び出す位置を変えても駄目

補足情報(FW/ツールのバージョンなど)

java8,eclipse,windowsです。
java8だからFX使えというコメントはなしでお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

特殊な例だと思いますが、コンストラクタを呼び出す前に呼び出したら動きました。

java

1public JylFrame( boolean undecorated ) 2 { 3 setUndecorated( undecorated ); 4 new JylFrame(); 5 }

投稿2018/10/06 07:19

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkuri

2018/10/07 01:55

ネットにそのサイトでの質問が確かにありましたね。 ですがそれを見ても解決しなかったので質問しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問