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

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

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

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

Q&A

解決済

2回答

2123閲覧

StringPropertyを用いたswitch文

hilty8

総合スコア15

JavaFX

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

0グッド

0クリップ

投稿2018/03/20 03:15

JavaFXを独学で学んでいる者です。

javafx.beans.property.StringPropertyを用いてswitch文で分岐をしたいのですが、
StringPropertyをString型として用いる方法がわかりません。

下記のコードの実行結果は「MISS!」になりました。
因みにtoString()ではなくgetValue()も試しましたが、失敗しました。

宜しくお願い致します。

java

1StringProperty str1 = new SimpleStringProperty("exam"); 2StringProperty str2 = new SimpleStringProperty("yeah!"); 3 4// str1に従ってstr2が変わるように設定 5str1.addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> { 6 str2.setValue(str1.toString()); 7}); 8// str1の値を変更 9str1.setValue("up"); 10 11// str2の値を用いたSwitch文 12switch(str2.toString()){ 13 case "up": 14 System.out.println("OK!"); 15 default: 16 System.out.println("MISS!"); 17}

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

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

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

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

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

guest

回答2

0

ベストアンサー

JavaFXのプロパティーの中に入っている値を参照するには

str2.toString()

ではなく

str2.get() or str2.getValue()

とします。そうなおすと意図通り動作すると思います。


なお、

Java

1str1.addListener((observable, oldValue, newValue) -> str2.setValue(newValue));

と書くのが普通と思います。setValueの引数はstr1.getValue()とも書けますけど、一々そう書かなくてよいようにnewValueという引数に新しい値が渡ってきます。

さらには上記はもっと単純に以下のようにするのが普通です。

str2.bind(str1);

投稿2018/03/20 04:42

KSwordOfHaste

総合スコア18392

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

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

hilty8

2018/03/20 05:27

回答ありがとうございます。 Bindの簡潔な表記法についても、情報ありがとうございます。とても助かりました。 もう1つの回答にも少し記載しましたが、先ずBindの設定を、 str2.bind(str1); にした上で、 toString(), get(), getValue() の3つで実験したところ、仰る通り、get(), getValue() の2つでは期待通りの挙動になりました。
guest

0

str2.setValue(str1.toString());は、Stringの値渡しですので、
その後にstr1.setValue("up");str1の値を変更しても、
str2upにならないと思いますよ。
getValue()も同じようにStringが戻り値になっています。

switchの前後にsystem.outででもstr2の中身を確認してはどうでしょうか。

投稿2018/03/20 04:16

szk.

総合スコア1400

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

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

hilty8

2018/03/20 05:20

回答ありがとうございます。 Bindの設定を、str2.setValue(str1.toString() ); のままで実験してみましたが、 str2の値が"up" に変わっていました。一応報告しておきます。 因みにSystem.out.println("str2の値: " + str2.getValue() ); で実験しました。
hilty8

2018/03/20 05:25

すみません。先ほどの結果なのですが、 ・Bindの設定 ー str2.setValue(str1.toString() ); の場合  → str2の値: StringProperty [value: up] ・Bindの設定 ー str2.bind(str1); の場合  → str2の値: up と表示されました。何かのご参考になれば幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問