🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Eclipse

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

Q&A

解決済

1回答

1766閲覧

javaFX。◯×クイズでランダムに問題を表示して、◯か×かの判定を行いたい。

hona_tan

総合スコア45

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Eclipse

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

1グッド

0クリップ

投稿2020/12/16 07:20

簡単な◯×クイズを作っています。
進むボタンを押すと、次の問題がランダムに表示されるようにしたいのですが、うまくいきません。

18行目に int j = new Random().nextInt(6);を入れているからダメだということはわかっているのですが、
next.setOnAction( のところに int j = new Random().nextInt(6);を入れると、maruとbatuで判定ができなくなります。
どのようなプログラムだとうまくいくのかご教授お願いします。

import java.util.Random; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.FlowPane; import javafx.stage.Stage; //javaFXを使うときはpublicをつける。 public class a extends Application { public static void main(String[] args) { launch(args); } public void start(Stage myStage) { int j = new Random().nextInt(6); myStage.setTitle("◯ × クイズ"); FlowPane rootNode = new FlowPane(30, 30);//(横幅, 縦幅) rootNode.setAlignment(Pos.TOP_LEFT); //配置位置を設定 // Sceneの作成 Scene myScene = new Scene(rootNode, 450, 600); // stage上にsceneを作成 myStage.setScene(myScene); // label,ImageViewを作成 Label response = new Label(); //テキストを配置するためのもの response.setText("◯ × クイズ\nスタート"); //画像を配置するためのもの ImageView logo = new ImageView(); ImageView logo2 = new ImageView(); Image img = new Image("https://frame-illust.com/fi/wp-content/uploads/2016/02/6728.png", 150, 150, false, false); // ◯ logo.setImage(img); Image img2 = new Image("https://illust8.com/wp-content/uploads/2020/10/batsu_cute_cat_11250.png", 150, 150, false, false); // × logo2.setImage(img2); //Buttonの作成 Button next = new Button("進む"); Button clear = new Button("リセット"); Button maru = new Button("◯"); maru.setPrefWidth(50); Button batu = new Button("×"); batu.setPrefWidth(50); //nextボタンが押された時の処理 next.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { Image img = new Image("https://frame-illust.com/fi/wp-content/uploads/2016/02/6728.png", 150, 150, false, false); // ◯ logo.setImage(img); Image img2 = new Image("https://illust8.com/wp-content/uploads/2020/10/batsu_cute_cat_11250.png", 150, 150, false, false); // × logo2.setImage(img2); if (j == 0) { response.setText("\n1円玉の直径は1センチメートルである。");//× } else if (j == 1) { response.setText("\n夏になると増える蚊ですが、主食は人間の血液である。");//× } else if (j == 2) { response.setText("\n地球上で一番素早く動ける動物はチーターである。");//×︎ } else if (j == 3) { response.setText("\nキラキラネームで「プリンセスキャンディ」と命名された方が実在する。");//◯︎ } else if (j == 4) { response.setText("\n食用として飼育されている豚の体脂肪率は、一般的には30%である。");//× } else if (j == 5) { response.setText("\n涙の味は感情によって変化する。");//◯︎ } rootNode.getChildren().addAll(maru, batu); } }); //◯ボタンが押された時の処理 maru.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { if (j == 0) { response.setText("\n残念!\n答えは×で直径2センチメートルでした。\n\n\n\n"); } else if (j == 1) { response.setText("\n残念!\n答えは×で主食は花や密などでした。\n\n\n\n\n\n"); } else if (j == 2) { response.setText("\n残念!\n答えは×でハヤブサの時速389kmでした。\n\n\n\n"); } else if (j == 3) { response.setText("\n正解です!\n月曜から夜更かしという番組で紹介されました。"); } else if (j == 4) { response.setText("\n残念!\n答えは×で豚の体脂肪率は、14~18%です。何気にマッチョです。"); } else if (j == 5) { response.setText("\n正解です!\nうれしい時に流す涙は比較的含まれるナトリウム量が少ないため、味が薄いです。\n怒っている時など感情が昂っている際はナトリウムの量が増え、塩辛くなります。"); } } }); //×ボタンが押された時の処理 batu.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { if (j == 0) { response.setText("正解です!\n直径2センチメートルでした。\n\n\n\n\n\n"); } else if (j == 1) { response.setText("正解です!\n主食は花や密などです。\n\n\n\n\n\n\n\n"); } else if (j == 2) { response.setText("正解です!\nハヤブサの時速389kmです。\n\n\n\n\n\n\n"); } else if (j == 3) { response.setText("残念!\n答えは◯で月曜から夜更かしという番組で紹介されています。"); } else if (j == 4) { response.setText("正解です。\n豚の体脂肪率は、14~18%です。何気にマッチョです。"); } else if (j == 5) { response.setText("残念!\n答えは◯で実はうれしい時に流す涙は比較的含まれるナトリウム量が少ないため、味が薄いです。\n怒っている時など感情が昂っている際はナトリウムの量が増え、塩辛くなります。"); } } }); //リセットボタンを押した後の処理 clear.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent ae) { response.setText(null); } }); // sceneにテキストフィールド、ボタン、ラベルを設置 rootNode.getChildren().addAll(clear, next, response, logo, logo2); myStage.show(); } }

Eclipseを使っています。

TN8001👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

18行目に int j = new Random().nextInt(6);を入れているからダメだということはわかっているのですが、
next.setOnAction( のところに int j = new Random().nextInt(6);を入れると、maruとbatuで判定ができなくなります。

jをフィールド(メンバ変数)にするのがいいですかね。
レイアウトが崩れ気味でしたので、調整させていただきました^^

Java

1import java.util.Random; 2 3import javafx.application.Application; 4import javafx.event.ActionEvent; 5import javafx.event.EventHandler; 6import javafx.geometry.Pos; 7import javafx.scene.Scene; 8import javafx.scene.control.Button; 9import javafx.scene.control.Label; 10import javafx.scene.image.Image; 11import javafx.scene.image.ImageView; 12import javafx.scene.layout.HBox; 13import javafx.scene.layout.VBox; 14import javafx.stage.Stage; 15 16 17public class Main extends Application { 18 public static void main(String[] args) { launch(args); } 19 20 private int j; // フィールド(メンバ変数) 21 22 public void start(Stage myStage) { 23 myStage.setTitle("◯ × クイズ"); 24 VBox rootNode = new VBox(30); // 縦に積み重ねるレイアウト 隙間30 25 26 Scene myScene = new Scene(rootNode, 450, 600); 27 myStage.setScene(myScene); 28 29 Label response = new Label("◯ × クイズ\nスタート"); 30 response.setWrapText(true); // 端まで行ったら折り返し 31 response.setAlignment(Pos.CENTER); // 文字中央ぞろえ 32 response.setMaxWidth(Double.MAX_VALUE); // 文字中央ぞろえするため幅可変 33 response.setMinHeight(120); // ボタン位置がずれにくいように最低高さを設定 34 35 ImageView logo = new ImageView(new Image("https://frame-illust.com/fi/wp-content/uploads/2016/02/6728.png", 150, 150, false, false)); 36 ImageView logo2 = new ImageView(new Image("https://illust8.com/wp-content/uploads/2020/10/batsu_cute_cat_11250.png", 150, 150, false, false)); 37 38 Button next = new Button("進む"); 39 Button clear = new Button("リセット"); 40 41 Button maru = new Button("◯"); 42 maru.setPrefWidth(50); 43 maru.setVisible(false); // 最初は非表示 44 45 Button batu = new Button("×"); 46 batu.setPrefWidth(50); 47 batu.setVisible(false); 48 49 50 HBox hBox1 = new HBox(10, clear, next); // 横に積み重ねるレイアウト 隙間10 51 hBox1.setAlignment(Pos.CENTER); // 左右中央ぞろえ 52 53 HBox hBox2 = new HBox(10, logo, logo2); 54 hBox2.setAlignment(Pos.CENTER); 55 56 HBox hBox3 = new HBox(10, maru, batu); 57 hBox3.setAlignment(Pos.CENTER); 58 59 rootNode.getChildren().addAll(hBox1, response, hBox2, hBox3); 60 61 62 next.setOnAction(new EventHandler<ActionEvent>() { 63 public void handle(ActionEvent ae) { 64 j = new Random().nextInt(6); 65 66 if (j == 0) { 67 response.setText("\n1円玉の直径は1センチメートルである。");//× 68 } else if (j == 1) { 69 response.setText("\n夏になると増える蚊ですが、主食は人間の血液である。");//× 70 } else if (j == 2) { 71 response.setText("\n地球上で一番素早く動ける動物はチーターである。");//×︎ 72 } else if (j == 3) { 73 response.setText("\nキラキラネームで「プリンセスキャンディ」と命名された方が実在する。");//◯︎ 74 } else if (j == 4) { 75 response.setText("\n食用として飼育されている豚の体脂肪率は、一般的には30%である。");//× 76 } else if (j == 5) { 77 response.setText("\n涙の味は感情によって変化する。");//◯︎ 78 } 79 80 maru.setVisible(true); 81 batu.setVisible(true); 82 } 83 }); 84 85 maru.setOnAction(new EventHandler<ActionEvent>() { 86 public void handle(ActionEvent ae) { 87 if (j == 0) { 88 response.setText("\n残念!\n答えは×で直径2センチメートルでした。"); 89 } else if (j == 1) { 90 response.setText("\n残念!\n答えは×で主食は花や密などでした。"); 91 } else if (j == 2) { 92 response.setText("\n残念!\n答えは×でハヤブサの時速389kmでした。"); 93 } else if (j == 3) { 94 response.setText("\n正解です!\n月曜から夜更かしという番組で紹介されました。"); 95 } else if (j == 4) { 96 response.setText("\n残念!\n答えは×で豚の体脂肪率は、14~18%です。何気にマッチョです。"); 97 } else if (j == 5) { 98 response.setText("\n正解です!\nうれしい時に流す涙は比較的含まれるナトリウム量が少ないため、味が薄いです。\n怒っている時など感情が昂っている際はナトリウムの量が増え、塩辛くなります。"); 99 } 100 } 101 }); 102 103 batu.setOnAction(new EventHandler<ActionEvent>() { 104 public void handle(ActionEvent ae) { 105 if (j == 0) { 106 response.setText("正解です!\n直径2センチメートルでした。"); 107 } else if (j == 1) { 108 response.setText("正解です!\n主食は花や密などです。"); 109 } else if (j == 2) { 110 response.setText("正解です!\nハヤブサの時速389kmです。"); 111 } else if (j == 3) { 112 response.setText("残念!\n答えは◯で月曜から夜更かしという番組で紹介されています。"); 113 } else if (j == 4) { 114 response.setText("正解です。\n豚の体脂肪率は、14~18%です。何気にマッチョです。"); 115 } else if (j == 5) { 116 response.setText("残念!\n答えは◯で実はうれしい時に流す涙は比較的含まれるナトリウム量が少ないため、味が薄いです。\n怒っている時など感情が昂っている際はナトリウムの量が増え、塩辛くなります。"); 117 } 118 } 119 }); 120 121 clear.setOnAction(new EventHandler<ActionEvent>() { 122 public void handle(ActionEvent ae) { 123 response.setText("◯ × クイズ\nスタート"); 124 maru.setVisible(false); 125 batu.setVisible(false); 126 } 127 }); 128 129 myStage.show(); 130 } 131}

投稿2020/12/16 09:59

TN8001

総合スコア9855

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

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

hona_tan

2020/12/16 11:41

すごい! ボタンとかの位置修正は二の次だったんですけどここまでしてくれるなんて、ありがとうございます! なるほど、ランダムにするにはメンバを作ればよかったのですね。 //でコメントをつけて下さっていたのでとてもわかりやすかったです! HBoxとかこのように使えばよかったんですね。とても勉強になりました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問