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

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

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

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

Q&A

解決済

1回答

2367閲覧

JFrameにてオセロ版を表示したいのですが、フレームだけ表示されて画像が表示されません。

java_shin

総合スコア22

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

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

0グッド

0クリップ

投稿2018/11/08 07:59

前提・実現したいこと

Jframeを使用してオセロ板を表示したい。
(現段階では背景の黒画像のみが表示される)
いざ実行してみるとフレームは表示されるが、肝心の背景の黒四角が表示されません。

■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージは特に出ておりません。

該当のソースコード

Java

1//Begin of OthelloBoard class 2import java.io.*; 3public class OthelloBoard implements Runnable{ 4 5 public OthelloGUI gui; 6 7 public OthelloBoard() { 8 gui = new OthelloGUI(); 9 gui.BGtoFG(); 10 11 gui.windowShow(); 12 13 } //end of OthelloBoardコンストラクタ 14 15 16 public void run() { 17 try { 18 while (true) { 19 Thread.sleep(1000); 20 } 21 }catch(Exception ex) { 22 ex.printStackTrace(); 23 } 24 }//runメソッド終了 25 26 27 28 public static void main(String[] args) { 29 Thread othellob = new Thread(new OthelloBoard()); 30 31 try { 32 Thread.sleep(1000); 33 }catch(Exception ex){ 34 ex.printStackTrace(); 35 } 36 37 38 othellob.start(); 39 40 } //main関数終わり 41} //end of class Tetris 42 43//Begin of OthelloGUI Class 44import java.awt.*; 45import javax.swing.*; 46 47public class OthelloGUI { 48 49 private int ScreenX = 150; 50 private int ScreenY = 150; 51 private int ScreenW = 500; 52 private int ScreenH = 500; 53 54 private JFrame frame; 55 private JPanel panel; 56 private Image image; 57 58 private Graphics fg; // フロント画面 59 private Graphics bg; // バック画面 60 61 public OthelloGUI() { 62 63 frame = new JFrame("Othello"); 64 frame.setBounds(ScreenX,ScreenY,ScreenW,ScreenH); 65 frame.setResizable(false); 66 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 67 68 Container cont = frame.getContentPane(); 69 cont.setLayout(new FlowLayout(FlowLayout.CENTER,0,0)); 70 71 panel = new JPanel(); 72 panel.setPreferredSize(new Dimension(ScreenW,ScreenH)); 73 cont.add(panel); 74 75 frame.pack(); 76 77 image = panel.createImage(ScreenW,ScreenH); 78 79 fg = panel.getGraphics(); 80 bg = image.getGraphics(); 81 bg.setColor(Color.BLACK); 82 bg.fillRect(0,0,ScreenW,ScreenH); 83 84 }//OthelloGUIコンストラクタ終わり 85 86 87 88 public void BGtoFG() { 89 fg.drawImage(image,0,0,panel); 90 } // BGtoFG終わり 91 92 public void windowShow() { 93 frame.show(); 94 } // windowShow終わり 95 96} // OhelloGUI 終わり 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

試したこと

ググってみたところ、一瞬で画像が消えてる可能性があるそうだったので、
様々なところにThread.sleepを置いて処理をいったん停止させてみた。
(OthelloGUIクラスのwindowShowメソッドの最後などに)

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Java+JFrame全く詳しくないですが

OthelloBoard.java

Java

1//Begin of OthelloBoard class 2import java.io.*; 3public class OthelloBoard implements Runnable{ 4 5 public OthelloGUI gui; 6 7 public OthelloBoard() { 8 gui = new OthelloGUI(); 9 gui.windowShow(); 10 } //end of OthelloBoardコンストラクタ 11 12 public void run() { 13 try { 14 while (true) { 15 gui.draw(); 16 Thread.sleep(1000); 17 } 18 }catch(Exception ex) { 19 ex.printStackTrace(); 20 } 21 }//runメソッド終了 22 23 public static void main(String[] args) { 24 Thread othellob = new Thread(new OthelloBoard()); 25 othellob.start(); 26 } //main関数終わり 27} //end of class Tetris

OthelloGUI.java

Java

1//Begin of OthelloGUI Class 2import java.awt.*; 3import javax.swing.*; 4 5public class OthelloGUI { 6 7 private int ScreenX = 150; 8 private int ScreenY = 150; 9 private int ScreenW = 500; 10 private int ScreenH = 500; 11 12 private JFrame frame; 13 private JPanel panel; 14 private Image image; 15 16 private Graphics fg; // フロント画面 17 private Graphics bg; // バック画面 18 19 public OthelloGUI() { 20 21 frame = new JFrame("Othello"); 22 frame.setBounds(ScreenX,ScreenY,ScreenW,ScreenH); 23 frame.setResizable(false); 24 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 25 26 Container cont = frame.getContentPane(); 27 cont.setLayout(new FlowLayout(FlowLayout.CENTER,0,0)); 28 29 panel = new JPanel(); 30 panel.setPreferredSize(new Dimension(ScreenW,ScreenH)); 31 cont.add(panel); 32 33 frame.pack(); 34 35 image = panel.createImage(ScreenW,ScreenH); 36 37 fg = panel.getGraphics(); 38 }//OthelloGUIコンストラクタ終わり 39 40 public void draw() { 41 fg.setColor(Color.BLACK); 42 fg.fillRect(0,0,ScreenW,ScreenH); 43 } 44 45 public void windowShow() { 46 frame.show(); 47 } // windowShow終わり 48 49} // OhelloGUI 終わり

投稿2018/11/08 09:40

rururu3

総合スコア5545

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

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

java_shin

2018/11/08 10:29 編集

ご回答ありがとうございました。 頂いたソースを元に自分のソースを直してみたところ目的を果たすことが出来ました。 (頂いたソースそのままでもよかったのですが、OthelloGUI.BGtoFG()メソッドを使用して盤面を変えていく予定でしたのでそこだけ修正しました。) 止めたい処理を下記に押し込める必要があることを知りませんでした。 /* try { while (true) { gui.BGtoFG(); Thread.sleep(100); } }catch(Exception ex) { ex.printStackTrace(); } */ おかげ様で学習を先に進める事が出来そうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問