0

2 人のプレーヤーが多数の試行から特定の組み合わせのカードを取得する回数をカウントするシミュレーション プログラムを作成しようとしています。現在、JavaFX の Scene Builder を使用して一連のラベルをテーブルにきちんと配置し、コントローラ クラスでそれらの fx:id を参照しています。シミュレーションを実行するたびに、20 以上の結果のうちの 1 つが発生します。そして、特定の結果が発生するたびに、適切なラベルに 1 つ追加したいと考えています。また、コンピューターが計算を行うときに、ラベルの値が更新されるのを確認したいと考えています。

現在、結果が発生した回数を追跡する単純な整数配列があります。ただし、その整数配列をラベルにバインドするのに問題があります。私が見つけた潜在的な解決策

int i = 0;
Label.textProperty().bind(String.valueOf(i));

動作しないようです。さらに、DoubleProperties や NumberBindings を使っていろいろやってみたのですが、正直、何をやっているのかさっぱりわかりません。誰かがこの問題の簡単な解決策を説明してくれますか、または私の問題に関連するJavaFX 2のバインディングのリファレンスを提供してくれますか?

4

1 に答える 1

3

基本的なバインディングはここにあります
あなたがやろうとしていると思うことについては、プリミティブ、文字列、その他のオブジェクトではなく、プロパティオブジェクトのみをバインドできることを覚えておく必要があります。

そうは言っても、たとえば、ラベルに文字列を表示する場合は、適切なプロパティ オブジェクトでデータをラップする必要があります。

        StringProperty value = new SimpleStringProperty("Hello");
        label.textProperty().bind(value);

プロパティの値を変更すると、ラベルが更新されます。

        value.set("Bye");

ラベルのテキストは文字列であるため、これは文字列に対しては問題なく機能しますが、データが整数または倍精度の場合は、コンバーターを使用できます。

        IntegerProperty value = new SimpleIntegerProperty(10);
        label.textProperty().bindBidirectional(value, new NumberStringConverter());

同じことが double にも当てはまります。

        DoubleProperty val = new SimpleDoubleProperty(12.5);
        tipText.textProperty().bindBidirectional(val, new NumberStringConverter());

どちらもニーズを満たさない状況にある場合は、既存のコンバーターを拡張することもできます。

それが役立つことを願っています。

于 2013-10-15T19:05:45.627 に答える