私はenumに基づいて関数を変更するようにアプリケーションを設定しました。この列挙型にリンクされた変数の値は、プログラムがマウスクリックなどの特定のアクションをどのように解釈するかを決定します。アプリケーションの現在の「モード」が何であるかを反映するラベル(おそらく左下のステータス領域)を表示し、ユーザーに表示するための読み取り可能なメッセージを表示します。列挙型のtoString()をラベルにバインド
はここに私の列挙です:
enum Mode {
defaultMode, // Example states that will determine
alternativeMode; // how the program interprets mouse clicks
// My attempt at making a property that a label could bind to
private SimpleStringProperty property = new SimpleStringProperty(this, "myEnumProp", "Initial Text");
public SimpleStringProperty getProperty() {return property;}
// Override of the toString() method to display prettier text
@Override
public String toString()
{
switch(this) {
case defaultMode:
return "Default mode";
default:
return "Alternative mode";
}
}
}
私が集めたものから、私が探している本に(私はより多くの消化可能形式にオーバーライド)列挙型のtoString()プロパティをバインドする方法ですラベル。私はleftStatus.setText(applicationState.toString())
私はそれを行うたびに配置しなくても、私は
applicationState = Mode.alternativeMode;
ラベルが自動的にtoString()
結果を表示するようなものを設定するときは常にそうということでしょうバインディング。 (私のメインのコントローラクラスで):最初のテキストにラベルを設定します
leftStatus.textProperty().bind(applicationState.getProperty());
を、私はapplicationState
列挙型を更新したときに更新されません
は、ここで私が試したものです。
私は間違っていますか?
これは素晴らしい答えであり、私が必要とするものです。将来これに遭遇する可能性がある人のために、最後に.get()を追加するためにswitch文を調整しなければならないと付け加えたいかもしれません。他のすべては完璧に動作します。私はあなたの答えの両方をありがとう、私はそれが最もエレガントで簡単に実装するため、この1つを最高として選択します。 – Prester