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

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

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

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

Java

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

Q&A

解決済

1回答

1416閲覧

buttonのsetOnActionを纏めたい

karasumaru

総合スコア7

JavaFX

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

Java

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

0グッド

0クリップ

投稿2020/02/29 04:04

編集2020/02/29 06:58

前提・実現したいこと

javafxで計算機をつくりたいが
0-9ボタン押下処理を以下のように10回記述しないで纏めたい

java

1 2 //------------ 3 //各種ボタン 4 //------------ 5 6 //数字 7 if(pushEqual==false) { 8 9 tbNum[0].setOnAction((ActionEvent event)->{ 10 hogestr =tf1.getText(); 11 tf1.setText(hogestr+"0"); 12 }); 13 tbNum[1].setOnAction((ActionEvent event)->{ 14 hogestr =tf1.getText(); 15 tf1.setText(hogestr+"1"); 16 }); 17 tbNum[2].setOnAction((ActionEvent event)->{ 18 hogestr =tf1.getText(); 19 tf1.setText(hogestr+"2"); 20 }); 21 tbNum[3].setOnAction((ActionEvent event)->{ 22 hogestr =tf1.getText(); 23 tf1.setText(hogestr+"3"); 24 }); 25 tbNum[4].setOnAction((ActionEvent event)->{ 26 hogestr =tf1.getText(); 27 tf1.setText(hogestr+"4"); 28 }); 29 tbNum[5].setOnAction((ActionEvent event)->{ 30 hogestr =tf1.getText(); 31 tf1.setText(hogestr+"5"); 32 }); 33 tbNum[6].setOnAction((ActionEvent event)->{ 34 hogestr =tf1.getText(); 35 tf1.setText(hogestr+"6"); 36 }); 37 38 tbNum[7].setOnAction((ActionEvent event)->{ 39 hogestr =tf1.getText(); 40 tf1.setText(hogestr+"7"); 41 }); 42 tbNum[8].setOnAction((ActionEvent event)->{ 43 hogestr =tf1.getText(); 44 tf1.setText(hogestr+"8"); 45 }); 46 tbNum[9].setOnAction((ActionEvent event)->{ 47 hogestr =tf1.getText(); 48 tf1.setText(hogestr+"9"); 49 }); 50 51 //小数点 52 tbOpe[7].setOnAction((ActionEvent event)->{ 53 if(pushDot==false) {//小数点は2回押せない 54 hogestr =tf1.getText(); 55 tf1.setText(hogestr+"."); 56 pushDot=true; 57 } 58 }); 59 }else { 60 System.out.println("pushEqualにつき入力不可"); 61 } 62 63

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

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

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

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

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

jimbe

2020/02/29 05:24

コードは, ファイル毎に, 入力枠の上辺にある <code> を押すと出てくる ``` で囲まれた "コード" という文字列を置き換える形でコピペしてください. 専用の枠内に(字下げ等もちゃんと)表示されるようになります. その際, "ここに言語を入力" を java に置き換えると, java に合わせたフォントの変更等がされて, より読み易くなります. ファイル名は枠の外側に書くか, 内部にコメント形式で含めてください.
jimbe

2020/02/29 05:30

> for文に入れたいのですが、調べてもよく分かりませんでした どう調べてどう書いてあって何が分からなかったのでしょう. やり方は一つではありません. 人に因り, 書き方に因り, バリエーションは多数あります.
m.ts10806

2020/02/29 05:54 編集

>java初心者です これを伝えるための「初心者アイコンです」改めてタイトルや本文に記載する必要はありません
karasumaru

2020/02/29 06:11

質問の仕方やコードの貼り方が不勉強で、大変ご迷惑をおかけしました。ご指摘どうもありがとうございました。
jimbe

2020/02/29 06:28

ご質問は修正出来ますので, お試しになっては如何でしょうか.
karasumaru

2020/02/29 06:54

修正しました。ご指摘どうもありがとうございました。
m.ts10806

2020/02/29 07:06 編集

色々削りすぎです。単なる丸投げになってます。 もともとforがどうやら書いてたみたいですが、自身で書いて失敗してやってみないと身に付きませんよ。 回答につくようなコードはあくまで他人が書いた他人のコードです。 理解したいのでしたらまず自分で書きましょう。プログラム間違ったところでプログラムのエラーがでるだけでPCが壊れるようなことはまずありません。
karasumaru

2020/02/29 08:23 編集

回答ありがとうございます。クラスで処理するとこんなシンプルに記述できるんですね! setOnActionの外側のifもstart後には通らないと知りませんでした。 うまくいかなかったコードは消してしまっていたので、自分でもどう記述していたのか分からなくなっていました。ちゃんと残しておけばよかった。 色々ご丁寧にありがとうございました。
jimbe

2020/02/29 08:35

if(pushEqual==false) に関しましては, 一つには start メソッドのこともありますが, 一度 setOnAction したものは内部で記憶されていますので, 以降 setOnAction をしたりしなかったりしても意味は無いと思います. おそらくアクションを消す場合は setOnAction(null) とするのではないでしょうか.
guest

回答1

0

ベストアンサー

例えば以下のような内部クラスを作りますと,

java

1 //計算機ボタン親クラス 2 private class CalculatorButton extends ToggleButton { 3 CalculatorButton(Object data, String bgcolor, ToggleGroup group) { 4 super(""+data); 5 setToggleGroup(group); 6 setUserData(data); // データをセット 7 setFont( Font.font("meiryo",15) ); 8 setPrefWidth(100); 9 setPrefHeight(50); 10 setStyle("-fx-background-color:"+bgcolor+"; -fx-text-fill:black; -fx-border-color:#555;"); 11 } 12 } 13 14 //数字ボタン 15 private class NumButton extends CalculatorButton { 16 NumButton(int num, ToggleGroup group, TextField tf1) { 17 super(num, num%2==0?"red":"white", group); 18 setOnAction((ActionEvent event)->{ 19 if(!pushEqual) { 20 tf1.setText(tf1.getText()+num); 21 } 22 }); 23 } 24 }

数字キーボタンの生成が一行で済みますし, setOnAction の個所はまるまる不要になります.

java

1 //数字キーボタンを配列に入れる 2 ToggleGroup group1 = new ToggleGroup(); 3 ToggleButton[] tbNum = new ToggleButton[10]; 4 for(int i=0; i<10; i++) { 5 tbNum[i] = new NumButton(i, group1, tf1); 6 7 /* 不要 8 tbNum[i] = new ToggleButton(i+""); 9 tbNum[i].setToggleGroup(group1); 10 tbNum[i].setUserData(i); // データをセット 11 tbNum[i].setFont( Font.font("meiryo",15) ); 12 tbNum[i].setPrefWidth(100); 13 tbNum[i].setPrefHeight(50); 14 if(i%2==0) { 15 tbNum[i].setStyle("-fx-background-color:red; -fx-text-fill:black; -fx-border-color:#555;"); 16 }else { 17 tbNum[i].setStyle("-fx-background-color:white; -fx-text-fill:black; -fx-border-color:#555;"); 18 } 19 */ 20 }

java

1 /* 不要 2 tbNum[0].setOnAction((ActionEvent event)->{ 3 hogestr =tf1.getText(); 4 tf1.setText(hogestr+"0"); 5 }); 6 tbNum[1].setOnAction((ActionEvent event)->{ 7 System.out.println("pushEqual is "+pushEqual); 8 hogestr =tf1.getText(); 9 tf1.setText(hogestr+"1"); 10 }); 11 tbNum[2].setOnAction((ActionEvent event)->{ 12 hogestr =tf1.getText(); 13 tf1.setText(hogestr+"2"); 14 }); 15 tbNum[3].setOnAction((ActionEvent event)->{ 16 hogestr =tf1.getText(); 17 tf1.setText(hogestr+"3"); 18 }); 19 tbNum[4].setOnAction((ActionEvent event)->{ 20 hogestr =tf1.getText(); 21 tf1.setText(hogestr+"4"); 22 }); 23 tbNum[5].setOnAction((ActionEvent event)->{ 24 hogestr =tf1.getText(); 25 tf1.setText(hogestr+"5"); 26 }); 27 tbNum[6].setOnAction((ActionEvent event)->{ 28 hogestr =tf1.getText(); 29 tf1.setText(hogestr+"6"); 30 }); 31 tbNum[7].setOnAction((ActionEvent event)->{ 32 hogestr =tf1.getText(); 33 tf1.setText(hogestr+"7"); 34 }); 35 tbNum[8].setOnAction((ActionEvent event)->{ 36 hogestr =tf1.getText(); 37 tf1.setText(hogestr+"8"); 38 }); 39 tbNum[9].setOnAction((ActionEvent event)->{ 40 hogestr =tf1.getText(); 41 tf1.setText(hogestr+"9"); 42 }); 43 */

なお, setOnAction を囲っている if(pushEqual==false) は, start 後は通りませんので意味が有りません.

投稿2020/02/29 07:33

jimbe

総合スコア12545

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問