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

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

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

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

Q&A

解決済

1回答

2259閲覧

JavaFXでボタンを押した時にテキストを変更したい

LEO_

総合スコア6

Java

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

0グッド

0クリップ

投稿2020/04/12 08:44

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

Java FX で表示しているテキストをボタンを押した時に変更されるようにしたい
テキストをソースコードのように設定したのですが、ボタンを押した時にテキストが変更されるようにプログラムしたいのですがやり方がわかりません。
ボタンのアクションの設定をどうプログラミングすれば良いのか教えていただけたら幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java ソースコード public class test extends Application{ final HBox hb = new HBox(); private static Text text = new Text(); public static void main(String[] args){ launch(args) }   @Override public void start(Stage stage) throws IOException{ //最初に表示されるテキスト text.setText("最初のテキスト"); //シーンの設定 Scene scene = new Scene(new Group()); stage.setTitle("Test"); stage.setWidth(500); stage.setHeight(500); //ボタンの設定 final Button change = new Button("Change"); change.setOnAction(new EventHandler<ActionEvent>(){ @Override public void handle(ActionEvent changeText){ //ここで テキストの”最初のテキスト”を”変更されたテキスト” に変えたい      } }); hb.getChildren().addAll(change); final VBox vbox = new VBox(); vbox.setSpacing(5); vbox.setPadding(new Insets(10,0,50,10)); vbox.getChildren().addAll(text,hb); ((Group)scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); stage.show(); }

試したこと

ここに問題に対して試したことを記載してください。

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

netbeans の11.3 を使ってます
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

難しく考えすぎず、「最初のテキスト」と同じようにtext.setTextすればいいですね。

Java

1change.setOnAction(new EventHandler<ActionEvent>() { 2 @Override public void handle(ActionEvent changeText) { 3 text.setText("変更されたテキスト"); 4 } 5}); 6// ラムダでもよい 7//change.setOnAction(e -> text.setText("変更されたテキスト"));

全文追記

Java

1import java.io.IOException; 2 3import javafx.application.Application; 4import javafx.event.ActionEvent; 5import javafx.event.EventHandler; 6import javafx.geometry.Insets; 7import javafx.scene.Group; 8import javafx.scene.Scene; 9import javafx.scene.control.Button; 10import javafx.scene.layout.HBox; 11import javafx.scene.layout.VBox; 12import javafx.scene.text.Text; 13import javafx.stage.Stage; 14 15 16public class test extends Application { 17 final HBox hb = new HBox(); 18 private static Text text = new Text(); 19 20 public static void main(String[] args) { 21 launch(args); 22 } 23 24 @Override 25 public void start(Stage stage) throws IOException { 26 text.setText("最初のテキスト"); 27 Scene scene = new Scene(new Group()); 28 stage.setTitle("Test"); 29 stage.setWidth(500); 30 stage.setHeight(500); 31 32 final Button change = new Button("Change"); 33 34 // textがどこかで変更されているんではないだろうか? 35 // 今のtextをtに保存 36 Text t = text; 37 change.setOnAction(new EventHandler<ActionEvent>() { 38 @Override public void handle(ActionEvent changeText) { 39 // 保存したtを使う 40 t.setText("変更されたテキスト"); 41 // こちらは「新しいインスタンス」になっているので表示されている"最初のテキスト"は変わらない 42// text.setText("変更されたテキスト"); 43 } 44 }); 45 hb.getChildren().addAll(change); 46 47 final VBox vbox = new VBox(); 48 vbox.setSpacing(5); 49 vbox.setPadding(new Insets(10, 0, 50, 10)); 50 vbox.getChildren().addAll(text, hb); 51 52 ((Group) scene.getRoot()).getChildren().addAll(vbox); 53 stage.setScene(scene); 54 stage.show(); 55 56 // これならすぐ気づくがどこかで変更された というつもり 57 text = new Text("新しいインスタンス"); 58 } 59}

投稿2020/04/12 09:16

編集2020/04/13 03:52
TN8001

総合スコア9396

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

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

LEO_

2020/04/13 02:46

上記のようにText.setTextを使ってみたのですが反映されません。 setTextをした後に何かアップデートするために何かする必要はありませんか?
TN8001

2020/04/13 03:01

全文を追記しました。手元ではボタンを押したら変更されました。 Text textがstaticになっているのが気になります。 提示コード以外の部分がありますか?
LEO_

2020/04/13 03:18

そうですね。結構膨大な量のコードの一部でテキストに関わる部分だけアップロードしました。 これはExecel からデータを抽出して表に表示するプログラムでして、ボタンはそのデータの中から何かを探す検索ボタンなんです。 テキストも検索次第で内容が変わるのでできれば下記のアクションイベントに書いて使えるようなコードをご教授いただけたら幸いです。 staticにする必要がないという事でしょうか? @Override public void handle(ActionEvent changeText) { }
TN8001

2020/04/13 03:32 編集

膨大ですか^^; テスト用にボタンを2つ用意してまずsetTextが効くか試す。 徐々にコードを移していく。 のような感じで問題の切り分けがいりそうですね。 > staticにする必要がないという事でしょうか? 取っても動くならいいですが、staticにしたってことは何か事情があってそうしたと思うので、事情によっては仕方ないかもしれません。
TN8001

2020/04/13 03:55

ありそうなシナリオで追記を更新しました。 もしt.setTextで変更されるなら、そういう状態になっていると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問