java
1package games; 2 3import java.util.ArrayList; 4import java.util.List; 5 6import javafx.application.Application; 7import javafx.event.ActionEvent; 8import javafx.event.EventHandler; 9import javafx.geometry.Insets; 10import javafx.scene.Scene; 11import javafx.scene.control.Button; 12import javafx.scene.layout.FlowPane; 13import javafx.stage.Modality; 14import javafx.stage.Stage; 15 16public class Games extends Application { 17 18 @Override 19 public void start(Stage primaryStage) throws Exception { 20 // TODO 自動生成されたメソッド・スタブ 21 22 // フレームのプロパティの設定 23 primaryStage.setTitle("Games"); 24 primaryStage.setWidth(400); 25 primaryStage.setHeight(300); 26// primaryStage.initModality(Modality.APPLICATION_MODAL); 27 // パネルのプロパティ設定 28 FlowPane fp = new FlowPane(10, 10); 29 fp.setPadding(new Insets(10, 10, 10, 10)); 30 31 // ボタンをフォームに追加する 32 for (Button btn : buttonList()) { 33 btn.setPrefWidth(150); 34 fp.getChildren().add(btn); 35 } 36 37 Scene scene = new Scene(fp); 38 39 primaryStage.setScene(scene); 40 // フレームの表示 41 primaryStage.show(); 42 } 43 44 /** 45 * ボタンリスト生成 46 * 47 * @return 48 */ 49 public List<Button> buttonList() { 50 51 List<Button> btnList = new ArrayList<Button>(); 52 53 // フラッシュ暗算 54 Button btnFlash = new Button("フラッシュ暗算"); 55 btnFlash.setOnAction(new FlashButtonEvent()); 56 btnList.add(btnFlash); 57 58 // ブロック崩し 59 Button btnBlock = new Button("ブロック崩し"); 60 btnList.add(btnBlock); 61 62 // テトリス 63 Button btnTetris = new Button("テトリス"); 64 btnList.add(btnTetris); 65 66 // ピクロス 67 Button btnPicross = new Button("ピクロス"); 68 btnList.add(btnPicross); 69 70 // スペースインベーダー 71 Button btnInvaders = new Button("スペースインベーダー"); 72 btnList.add(btnInvaders); 73 74 // リバーシ 75 Button btnReverse = new Button("リバーシ"); 76 btnList.add(btnReverse); 77 78 return btnList; 79 80 } 81 82 public static void main(String[] args) { 83 // TODO 自動生成されたメソッド・スタブ 84 Application.launch(args); 85 } 86} 87
java
1package games; 2 3import java.util.HashMap; 4import java.util.Map; 5 6import javafx.event.ActionEvent; 7import javafx.event.EventHandler; 8import javafx.geometry.Insets; 9import javafx.scene.Scene; 10import javafx.scene.control.Button; 11import javafx.scene.control.ComboBox; 12import javafx.scene.control.Label; 13import javafx.scene.control.TextField; 14import javafx.scene.layout.FlowPane; 15import javafx.scene.layout.HBox; 16import javafx.scene.text.Font; 17import javafx.stage.Modality; 18import javafx.stage.Stage; 19 20public class FlashButtonEvent implements EventHandler<ActionEvent> { 21 22 @Override 23 public void handle(ActionEvent event) { 24 // TODO 自動生成されたメソッド・スタブ 25 // 新しいウインドウを生成 26 Stage newStage = new Stage(); 27 newStage.setWidth(520); 28 newStage.setResizable(false); 29 30 // モーダルでWindowを表示する(前のWindowは操作できないようにする) 31 newStage.initModality(Modality.APPLICATION_MODAL); 32 33 FlowPane fp1 = new FlowPane(10, 10); 34 fp1.setPadding(new Insets(10, 10, 10, 10)); 35 36 Label label1 = new Label(" 出てくる桁数"); 37 TextField textDigits1 = new TextField(); 38 Label label2 = new Label("おすすめ桁数:1〜3"); 39 fp1.getChildren().add(label1); 40 fp1.getChildren().add(textDigits1); 41 fp1.getChildren().add(label2); 42 43 Label label3 = new Label("数字の出ている時間"); 44 TextField textDigits2 = new TextField(); 45 Label label4 = new Label("おすすめ時間:0.5秒〜1秒"); 46 47 fp1.getChildren().add(label3); 48 fp1.getChildren().add(textDigits2); 49 fp1.getChildren().add(label4); 50 51 Label label5 = new Label(" 計算回数"); 52 TextField textDigits3 = new TextField(); 53 Label label6 = new Label("おすすめ回数:1〜5回"); 54 fp1.getChildren().add(label5); 55 fp1.getChildren().add(textDigits3); 56 fp1.getChildren().add(label6); 57 58 Label label7 = new Label(" 計算方法"); 59 ComboBox<String> cmbCalc = new ComboBox<String>(); 60 61 String[] data = { "+", "ー", "×", "÷", "ランダム" }; 62 cmbCalc.getItems().addAll(data); 63 // コンボボックスに最初のデータを表示させておく 64 cmbCalc.setValue(data[0]); 65 66 fp1.getChildren().add(label7); 67 fp1.getChildren().add(cmbCalc); 68 69 Button btnConfig = new Button("設定完了"); 70 btnConfig.setOnAction(new FlashCalc(1, 1, 1)); 71 72 Button btnClose = new Button("閉じる"); 73 btnClose.setOnAction((ActionEvent) -> newStage.close()); 74 75 fp1.getChildren().add(btnConfig); 76 fp1.getChildren().add(btnClose); 77 78 Scene scene1 = new Scene(fp1); 79 newStage.setScene(scene1); 80 81 // 新しいウインドウを表示 82 newStage.show(); 83 } 84
java
1package games; 2 3import javafx.event.ActionEvent; 4import javafx.event.EventHandler; 5import javafx.scene.Scene; 6import javafx.scene.control.Label; 7import javafx.scene.layout.FlowPane; 8import javafx.scene.text.Font; 9import javafx.stage.Modality; 10import javafx.stage.Stage; 11 12public class FlashCalc implements EventHandler<ActionEvent> { 13 14 private int test; 15 16 FlashCalc(int keta, int kaisu, int jikan) { 17 test = keta; 18 } 19 20 @Override 21 public void handle(ActionEvent event) { 22 // TODO 自動生成されたメソッド・スタブ 23 24 Stage stage = new Stage(); 25 stage.initModality(Modality.APPLICATION_MODAL); 26 27 FlowPane fPane = new FlowPane(); 28 29 Label lblNumber = new Label(String.valueOf(test)); 30 lblNumber.setFont(Font.font(70)); 31 32 fPane.getChildren().add(lblNumber); 33 34 Scene scene = new Scene(fPane); 35 36 stage.setScene(scene); 37 38 stage.show(); 39 } 40 41} 42
上記のコードで次の画面に値を渡すことは可能ですが、値が渡っててほしい2つ前の画面で値を意識しなければならず思うように値を渡せません。FlashCalcのクラスでコンストラクタの引数をIntegerにしておけばエラーにはならないですが、どのように値を渡したらいいかがわかりません。
お手数おかけしますが、ご教示お願いします。
追記 やりたいこと
質問の内容が不足していて申し訳ありません。フラッシュ暗算ボタンを押したらフラッシュ暗算の設定画面が出てきて設定ボタンを押したらその設定条件を次の画面へ持って行く処理をしたいです。現在は苦し紛れにbtnConfig.setOnAction(new FlashCalc(1, 1, 1));
と記述しています。
回答1件
あなたの回答
tips
プレビュー