前提・実現したいこと
現在、診断機能で、診断機能の仕組みは作れたのですが…
・primaryStageを解決することが出来ない
・32通りの答えの辿り着き方
が現在、分かりません…
よろしくお願いいたします。
発生している問題・エラーメッセージ
xception in thread "JavaFX Application Thread" java.lang.Error: Unresolved compilation problems: primaryStage を解決できません primaryStage を解決できません at saisyuukadai.date2$seEventHandler.handle(date2.java:198) at saisyuukadai.date2$seEventHandler.handle(date2.java:1) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Node.fireEvent(Node.java:8411) at javafx.scene.control.Button.fire(Button.java:185) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) at java.lang.Thread.run(Thread.java:748)
該当のソースコード
javafx
1 class seEventHandler implements EventHandler<ActionEvent>{ 2 public void handle(ActionEvent e2) { 3 BorderPane root = new BorderPane(); 4 root.setPadding(new Insets(10, 10, 10, 10)); 5 primaryStage.setScene(new Scene(root, 400, 300)); 6 7 lb = new Label(); 8 root.setCenter(lb); 9 10 bt1 = new Button(); 11 bt2 = new Button(); 12 bt1.setOnAction(ae -> { dog++; next(); }); 13 bt2.setOnAction(ae -> next()); 14 15 VBox box = new VBox(10, bt1, bt2); 16 box.setAlignment(Pos.CENTER); 17 root.setBottom(box); 18 19 createCSV(); 20 loadCSV(); 21 next(); 22 23 primaryStage.show(); 24 } 25 26 private void next() { 27 if (index < questions.length) { // 質問作成 28 lb.setText(questions[index][0]); // questions[index][0]が質問文 29 bt1.setText(questions[index][1]); // questions[index][0]は選択肢1 30 bt2.setText(questions[index][2]); 31 32 index++; 33 } else { // 結果判定 34 String result; 35 switch (dog) { 36 case 0: result = "あなたは完全に猫派です!"; break; 37 case 1: result = "あなたはどちらかというと猫派です。"; break; 38 case 2: result = "あなたはどちらかというと犬派です。"; break; 39 default: result = "あなたは完全に犬派です!"; break; 40 } 41 42 lb.setText(result); 43 bt1.setVisible(false); 44 bt2.setVisible(false); 45 } 46 } 47 48 private void loadCSV() throws IOException { 49 List<String> lines = Files.readAllLines(Paths.get("test.csv"), StandardCharsets.UTF_8); // ファイルを1行毎のリストに読み込み 50 51 questions = new String[lines.size()][]; // 行数分配列を確保 52 for (int i = 0; i < lines.size(); i++) { 53 String[] split = lines.get(i).split(","); // カンマで区切って「質問文・選択肢1・選択肢2」の配列を作成 54 questions[i] = split; // questions配列のi番目の中にまた配列を入れた 55 } 56 } 57 58 // というtest.csvがあるテイで 59 private void createCSV() throws IOException { 60 List<String> lines = Arrays.asList( 61 "休日の過ごし方は?,みんなでワイワイ,ひとりで趣味を", 62 "久しぶりに雪が降ったらどうする?,外で駆け回る,コタツでぬくぬく", 63 "褒められるとついついしてしまうことは?,よだれを垂らしてしまう,興味ないふりをしてしまう"); 64 65 Files.write(Paths.get("test.csv"), lines, StandardCharsets.UTF_8); 66 } 67 }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
jdk14
[Eclipse - 診断機能で必要なif文をなるべく減らしたいのですが、どなたか教えて頂けませんか…?|teratail](https://teratail.com/questions/313715
の回答コードをメニュー画面付きに更新しています。確認してください。
急いでいる理由があるのかもしれませんが、落ち着いて一つずつ解決していきましょう。
ありがとうございます、、、!今作成しているプログラミングだと、メニュー画面には、他の機能に行ける画面となっているので、可能であればイベントハンドラの中でまとめたいのですが、可能でしょうか…?
メニュー画面がどうなっているのかはわかりませんが、class seEventHandlerに入っていればいいのではないのですか?
>イベントハンドラの中でまとめたい
というのはどういう状態なんでしょうか??
すみませんでした、今、意味が分かりました…
私が悩んでいたのは、primarystageの意味で、修正していただいたコードを読んで直したところ診断の画面につなぐことが出来ました。
「イベントハンドラの中でまとめたい」につきましては、primaryStageをイベントハンドラの中で使うものだと思っていました…
そうですか。よかったです^^
この質問ですが、313715とかぶっているように思うので削除依頼をされたらどうでしょうか。
もし削除依頼が通らなかった場合は、自己回答で閉じてください。
了解です!
最後に一つだけ、お聞きしたいのですが、この診断の結果(4通りの)は、どのようにして出しているのでしょうか…?自分の理想が32通りなのですが、作れますかね…?
すみません、もしかしてこれって
---
if (index < questions.length) { // 質問作成
label.setText(questions[index][0]); // questions[index][0]が質問文
button1.setText(questions[index][1]); // questions[index][0]は選択肢1
button2.setText(questions[index][2]);
index++;
}
---
で、質問の数によって、出される答えの数が増えていく意味なのでしょうか?
2の5乗みたいなイメージで…
>どのようにして出しているのでしょうか…?
回答コードはYESの個数ですので、3*2の6通りの組み合わせがありますが、順番?は気にしない実装です。
>理想が32通りなのですが、作れますかね…?
32通りというと16*2ということでしょうかね。
結果の取得が、回答が欲しいのか・どちらを選んだかわかればいいのかがよくわかりません。
>質問の数によって、出される答えの数が増えていく意味なのでしょうか?
>2の5乗みたいなイメージで…
ちょっと意味が分かりませんが、2次元配列を使っています。
質問1,選択肢1,選択肢2
質問2,選択肢1,選択肢2
質問3,選択肢1,選択肢2
行がindexで、列が0,1,2になっています。
// 質問作成
というコメント文はちょっと良くなかったかもしれません^^;
質問内容を画面に反映という意味です。
「結果の取得が、回答が欲しいのか・どちらを選んだかわかればいいのかがよくわかりません。」についてなのですが、
〇は質問となります
回答1 回答2
〇 〇
回答1 回答2 回答1 回答2
〇 〇 〇 〇
みたいな感じで進めて、最終的に32通りの結果に繋げたい感じです…
説明が分かりにくくてすみません、、、
この図?だと矢印に沿って問題も変わるようなタイプのものに見えてしまいますが、そうではなく各段の問題は同じということでいいんでしょうかね?
恐らくそうだとして、
でしたら文字列を使って〇〇×〇のように、16問分回答を足していくのが簡便かもしれません。
あれ?これを考えているうちに勘違いに気づきましたが、順番を気にするなら、3問だと2^3の8通りですね^^;
ということは一人が答える質問は5問なんでしょうか?(2^5)
ルートによって質問が変わるタイプで16問用意しているということ??
最初に
>質問文は固定で、選択のYESの個数で判定するようなものですよね?
と確認したのですが、ルートによって質問が変わるとなるとだいぶ話が違ってきます。。。
>ということは一人が答える質問は5問なんでしょうか?(2^5)
ルートによって質問が変わるタイプで16問用意しているということ??
すみません、、、その通りです…
やはり、if文などで、コツコツやるしかないのでしょうか…
となるとツリー状になりますから、CSVとあまり相性が良くないですねぇ。
何かいいアイデアが浮かべばいいのですが。。。
ちょっと考えさせてください。
了解です、お手間をおかけしてすみません、、、
あまりやりすぎると「質問と回答」ではなく「作業依頼」になるので、ヒントを得る程度にとどめられたほうが良いかと思います。
上記で説明した、質問と回答の遷移に関しては、仕様として、質問文に追記してください。
回答2件
あなたの回答
tips
プレビュー