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

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

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

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

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

Swing

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

4242閲覧

swing 標準出力をGUIで表示する方法

rutus

総合スコア7

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

Java

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

Swing

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/12/10 04:16

編集2019/12/14 09:56

前提・実現したいこと

Eclipseでゲームを作っております。
標準出力でコンソールに出てくる内容をGUIに反映させたい。

発生している問題

ネットで調べ「コンソール内容をtextAreaに出力できるやり方」など
調べましたが実装がうまく行かずお手上げ状態です。
全く解決の糸口が見えず納期に間に合わせることが
できず焦りが募ってます。

該当のソースコード

package game; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; public class GameScreenE extends JFrame implements ActionListener { int answer[]= new int[3]; int count = 0, hit =0 ,blow =0; JComboBox<Integer> btn1 = new JComboBox<Integer>(); JComboBox<Integer> btn2 = new JComboBox<Integer>(); JComboBox<Integer> btn3 = new JComboBox<Integer>();      public void init() { this.setTitle("game"); //フレームの設定(タイトル・サイズ・位置 this.setTitle("game"); this.setBounds(100, 100, 400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel ps = new JPanel(); JPanel pn = new JPanel(); JPanel pc = new JPanel(); JLabel label1 = new JLabel("?"); JLabel label2 =new JLabel("?"); JLabel label3 =new JLabel("?"); label1.setFont(new Font("MS ゴシック", Font.BOLD, 50)); label2.setFont(new Font("MS ゴシック", Font.BOLD, 50)); label3.setFont(new Font("MS ゴシック", Font.BOLD, 50)); JLabel label4 = new JLabel("<html>※○は場所も数字も合ってます。" + "<br>△は数字だけ合ってます。(" + count + ")"); label4.setFont(new Font("MS ゴシック", Font.BOLD, 10)); pn.add(label1); pn.add(label2); pn.add(label3); this.getContentPane().add(pn,BorderLayout.NORTH); pc.add(label4); this.getContentPane().add(pc,BorderLayout.CENTER); for(int i=1; i<=6; i++) { btn1.addItem(i); btn2.addItem(i); btn3.addItem(i); } JButton btn4 = new JButton("チェック"); btn4.addActionListener(this); ps.add(btn1); ps.add(btn2); ps.add(btn3); ps.add(btn4); this.getContentPane().add(ps,BorderLayout.SOUTH); this.setVisible(true); JPanel p = new JPanel(); JTextArea area1 = new JTextArea(); p.add(area1); this. getContentPane().add(p, BorderLayout.CENTER); for (int i = 0; i < answer.length; i++) { boolean sw = false; answer[i] = (int) (Math.random() * 6 + 1); do { sw = false; for (int j = i - 1; j >= 0; j--) { if (answer[i] == answer[j]) { sw= true; answer[i] = (int) (Math.random() * 6 + 1); } } } while (sw == true); } } @Override public void actionPerformed(ActionEvent e) { // TODO 自動生成されたメソッド・スタブ JButton btn = (JButton)e.getSource(); String txt = btn.getText(); if (txt.equals("チェック")) { //入力された値を取り出す Integer data1 = (Integer)btn1.getSelectedItem(); Integer data2 = (Integer)btn2.getSelectedItem(); Integer data3 = (Integer)btn3.getSelectedItem(); //答えの数字3つと、入力された数字3つを答え合わせする。 //配列設定 int datas [] = new int[3]; datas[0] = data1; datas[1] = data2; datas[2] = data3; hit = 0; blow = 0; for (int i = 0; i < answer.length; i++) { for (int j = 0; j < answer.length; j++) { if (i == j && datas[i] == answer[j]) { hit++; } else if (datas[i] == answer[j]) { blow++; } } } } count++; System.out.println(count+"回目 \n○ " + hit + " △" + blow); if (hit == 3) {//分岐点。 終われば画面4 超えれば画面5 ClearScreen cls = new ClearScreen(); cls.init();//初期化。 } if(count == 15) {//Easy OverScreen ovs =new OverScreen(); ovs.init(); } } }

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

Eclipse2019-09を使用しています。

先日にも掲示したのですが頼れるのはここの方々だけです。
よろしくお願い致します。
当方も一生懸命理解に努めます。

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

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

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

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

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

y_waiwai

2019/12/10 04:28

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
rutus

2019/12/10 04:38

ご指摘ありがとうございます。 修正致しました。
y_waiwai

2019/12/10 04:42

まだできてないですねえw うまくいくと、コードのコピーができるようになり検証が簡単にできるようになります。 やりなおしてみてください
rutus

2019/12/10 04:53

今回は大丈夫だと思いますがどうでしょうか?
BeatStar

2019/12/10 05:07

私の読解力がないせいでしょうか、意味を掴みかねています。 GUIならそもそもコンソール表示させなくてもよいのでは?
y_waiwai

2019/12/10 05:13

ありがとうございます。 バッチリです
rutus

2019/12/10 05:20

>>BeatStar様 拙い文章で申し訳ありません。 現在作り上げたものが正しく動いているか検証するために 標準出力しております。 希望はGUI内に結果を反映させたいのです。
BeatStar

2019/12/10 05:41

質問者さん、 つまり、「デバッグ用にSystem....を使いたいが...」っていういうことですね。 それなら"本来は GUI側に出力するのをデバッグ用(あるいは確認用)にコンソール出力も行う"ですね。 了解しました。
TN8001

2019/12/10 09:23 編集

[初級者のためのJava ~ミニゲームを作ってみよう~ (1/3):CodeZine(コードジン)](https://codezine.jp/article/detail/765 ) と似てるようなそうでもないような感じですが、もしご覧になっていないなら参考になるかと思います(メールアドレスの登録が必要) この記事ではJTableで表示しています。
rutus

2019/12/11 05:37

TN8001様 ありがとうございます。拝見させていただきました。 この内容でも難しいと思ってしまうのは やはり努力が足りていませんね。 理解できるよう頑張ります。
guest

回答2

0

ベストアンサー

こんなんでいいですか?
元のコメントは削除し変更点がコメントになっています。

Java

1package game; 2 3import java.awt.BorderLayout; 4import java.awt.Font; 5import java.awt.event.ActionEvent; 6import java.awt.event.ActionListener; 7import javax.swing.*; 8 9public class GameScreenE extends JFrame implements ActionListener { 10 public static void main(String args[]) { 11 GameScreenE frame = new GameScreenE(); 12 frame.init(); 13 } 14 15 int answer[] = new int[3]; 16 int count = 0, hit = 0, blow = 0; 17 18 JComboBox<Integer> btn1 = new JComboBox<Integer>(); 19 JComboBox<Integer> btn2 = new JComboBox<Integer>(); 20 JComboBox<Integer> btn3 = new JComboBox<Integer>(); 21 // ※ 22 JTextArea area1; 23 24 public void init() { 25 this.setTitle("game"); 26 this.setBounds(100, 100, 400, 300); 27 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 28 29 JPanel ps = new JPanel(); 30 JPanel pn = new JPanel(); 31 JPanel pc = new JPanel(); 32 // ※ 33 pc.setLayout(new BorderLayout()); 34 35 JLabel label1 = new JLabel("?"); 36 JLabel label2 = new JLabel("?"); 37 JLabel label3 = new JLabel("?"); 38 label1.setFont(new Font("MS ゴシック", Font.BOLD, 50)); 39 label2.setFont(new Font("MS ゴシック", Font.BOLD, 50)); 40 label3.setFont(new Font("MS ゴシック", Font.BOLD, 50)); 41 42 JLabel label4 = new JLabel("<html>※○は場所も数字も合ってます。" 43 + "<br>△は数字だけ合ってます。(" + count + ")"); 44 label4.setFont(new Font("MS ゴシック", Font.BOLD, 10)); 45 // ※ 46 label4.setHorizontalAlignment(JLabel.CENTER); 47 48 pn.add(label1); 49 pn.add(label2); 50 pn.add(label3); 51 this.getContentPane().add(pn, BorderLayout.NORTH); 52// pc.add(label4); 53 pc.add(label4, BorderLayout.NORTH); 54 this.getContentPane().add(pc, BorderLayout.CENTER); 55 56 57 for (int i = 1; i <= 6; i++) { 58 btn1.addItem(i); 59 btn2.addItem(i); 60 btn3.addItem(i); 61 } 62 63 JButton btn4 = new JButton("チェック"); 64 btn4.addActionListener(this); 65 66 ps.add(btn1); 67 ps.add(btn2); 68 ps.add(btn3); 69 ps.add(btn4); 70 71 this.getContentPane().add(ps, BorderLayout.SOUTH); 72 this.setVisible(true); 73 74// JPanel p = new JPanel(); 75// JTextArea area1 = new JTextArea(); 76// p.add(area1); 77// this. getContentPane().add(p, BorderLayout.CENTER); 78 area1 = new JTextArea(); 79 JScrollPane scrollpane = new JScrollPane(area1, 80 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 81 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 82 pc.add(scrollpane, BorderLayout.CENTER); 83 84 85 for (int i = 0; i < answer.length; i++) { 86 boolean sw = false; 87 answer[i] = (int) (Math.random() * 6 + 1); 88 do { 89 sw = false; 90 for (int j = i - 1; j >= 0; j--) { 91 if (answer[i] == answer[j]) { 92 sw = true; 93 answer[i] = (int) (Math.random() * 6 + 1); 94 } 95 } 96 } while (sw == true); 97 } 98 } 99 100 @Override 101 public void actionPerformed(ActionEvent e) { 102 JButton btn = (JButton) e.getSource(); 103 String txt = btn.getText(); 104 if (txt.equals("チェック")) { 105 106 Integer data1 = (Integer) btn1.getSelectedItem(); 107 Integer data2 = (Integer) btn2.getSelectedItem(); 108 Integer data3 = (Integer) btn3.getSelectedItem(); 109 110 int datas[] = new int[3]; 111 datas[0] = data1; 112 datas[1] = data2; 113 datas[2] = data3; 114 115 hit = 0; 116 blow = 0; 117 118 for (int i = 0; i < answer.length; i++) { 119 for (int j = 0; j < answer.length; j++) { 120 if (i == j && datas[i] == answer[j]) { 121 hit++; 122 } else if (datas[i] == answer[j]) { 123 blow++; 124 } 125 } 126 } 127 } 128 count++; 129 130// System.out.println(count+"回目 \n○ " + hit + " △" + blow); 131 println(count + "回目 \n○ " + hit + " △" + blow); 132 133 if (hit == 3) { 134// ClearScreen cls = new ClearScreen(); 135// cls.init();//初期化。 136 } 137 138 if (count == 15) { 139// OverScreen ovs = new OverScreen(); 140// ovs.init(); 141 } 142 } 143 144 // ※ 145 void println(String text) { 146 System.out.println(text); 147 area1.append(text + "\n"); 148 } 149}

投稿2019/12/14 11:24

TN8001

総合スコア9244

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

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

TN8001

2019/12/14 11:25

jimbeさんとのやり取りで解決していると思っていました。
rutus

2019/12/14 11:52

ご回答有難うございます。 大変助かりました。感謝してもしきれません。 コードを読み勉強させていただきます。 もしよろしければお聞きしたいのですが 今回の問題解決に当たってポイントとなる点が ございましたらご教授頂きたいです。
TN8001

2019/12/14 12:00

このコード(の大部分)はrutusさんが書かれたものではないのですか? やり取りの中でどこがわからないのかが、わからなかったのですが。 jimbeさんの指摘の点と、スクロールバーが出なかったのでJScrollPaneに包んだって程度です。
guest

0

JTextArea を追加して println 時に JTextArea にも出力(追加)するようにされては如何でしょうか.


java

1 JLabel label4 = new JLabel(""); 2 label4.setText(String.valueOf(hit)); 3 label4.setText(String.valueOf(blow));

label4 で hit と blow を表示するということでしょうか.
setText は既存文字列があった場合置き換えますので, これでは blow の数値しか表示されませんが, 良いのでしょうか.

java

1 pn.add(label1); 2 this.getContentPane().add(pn,BorderLayout.NORTH); 3 pn.add(label2); 4 this.getContentPane().add(pn,BorderLayout.NORTH); 5 pn.add(label3); 6 this.getContentPane().add(pn,BorderLayout.NORTH);

勘違いされているようですが, add() で設定されるのは指定した pn のその時点での状態(のコピー?)ではありません.
これは

java

1 pn.add(label1); 2 pn.add(label2); 3 pn.add(label3); 4 this.getContentPane().add(pn,BorderLayout.NORTH);

ということです.
また, この後の

java

1 ps.add(label3); 2 this.getContentPane().add(pn,BorderLayout.SOUTH);

は, ps/pn は間違っていませんか?

投稿2019/12/10 05:47

編集2019/12/10 05:58
jimbe

総合スコア12545

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

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

jimbe

2019/12/10 06:04

現状でそこまでする必要があるのでしょうか. println のラップメソッドを作り, その中で標準出力と JTextArea にそれぞれ書き出せば良いのではと思います. println("ヒット" + hit + " ブロー" + blow+"回数"+count); void println(String text) { System.put.println(text); textArea.add(text+"\n"); }
jimbe

2019/12/10 07:30

もし label4 にhit/blow/countを表示するのでしたら, > JComboBox<Integer> btn3 = new JComboBox<Integer>(); の下に > JLabel label4 = new JLabel(""); を移動し, label4.setText("ヒット" + hit + " ブロー" + blow+"回数"+count); で出来ると思います.
rutus

2019/12/11 05:36

ご指摘・ご回答ありがとうございます。 返答が遅れ申し訳ありません。 チェックを押すことで比較を行い、hit.blow.countに値を代入し 結果をGUIに表示させたいのです。 void println(String text) { System.put.println(text); textArea.add(text+"\n"); } はどこで使えばよろしいのでしょうか? printlnにvoidは無効の型だと表示されてしまいます。
jimbe

2019/12/11 07:29

GameScreen のメソッドとして定義し, System.out.println の代わりに println を呼びます...コード間違えてますね, 失礼しました. > System.put.println(text); は System.out.println(text); です. > 結果をGUIに表示させたい もう少し具体的にして頂けると助かります. それは textArea で良いのでしょうか. それともそれらしきラベルの label4 が良いのでしょうか.
rutus

2019/12/12 00:13

いえいえご丁寧にありがとうございます。 言葉足らずで申し訳ありません。 表示することが大前提ですのでどちらでも大丈夫です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問