Javafxは、Graphicsアプリケーションを構築するためにJavaで使用される新しい標準ライブラリですが、多くのプログラマーはSwingまたはAWTを使用することに固執しています。 Javafxツールセットに新しい素晴らしい機能を備えた応答性の高い高速アプリケーションを構築する方法に関するいくつかの提案を以下に示します。
1。属性値
Javafxコンポーネントを完全に理解している場合、Mobileはプロパティに遭遇しました。 FXライブラリのほぼすべての値、パーティションの幅、画像のサイズ、ラベル内のテキスト、リスト内の子アイテム、およびチェックボックスのステータスを観察できます。属性は代替案に分けられます:書き込み可能な属性と読み取り可能な属性。書き込み可能な値は、セッターメソッドを使用するか、直接使用することができます。 Javafxは、イベント処理プロセスを処理し、このプロパティに依存するすべてのコンポーネントに通知されるようにします。読み取り可能なプロパティには、値が変更されたときに通知を受信できる方法があります。
例:
// readable-and writable stringproperty name = new SimplestringProperty( "emil"); // read-only observablebooleanvalue nameisempty = name.isempty();
2。バインド値
書き込みや読みやすい値がある場合、これらの値がどのように関連付けられているかについてのルールの定義を開始できます。書き込み可能なプロパティは、読みやすいプロパティに縛られる可能性があるため、その価値は常に読みやすいプロパティと一致します。バインディングはすぐには発生しませんが、値が観察される前に行われます(そして、私がそこでしたことを見てください)。結合は、一方向または双方向にすることができます。もちろん、それらが双方向である場合、両方のプロパティは書き込み可能である必要があります。
例:
textfield fielda = new textfield(); textfield fieldb = new textfield(); fielda.prefwidthproperty()。bind(fieldb.widthproperty());
3。観察可能なリスト
属性だけが観察できるものではありません。リストが観察結果にカプセル化されている場合、リストのメンバーも観察できます。 ObservableLelistの応答モデルは非常に進んでいます。リストが変更されたときに通知を受信するだけでなく、リストの変更方法も確認できます。
例:
リスト<String> otherList = arrays.Aslist( "foo"、 "bar"、 "bar"); observablelist <string> list = fxcollections.observableLelist(otherlist); list.addlistener((listchangelistener.change <?extends string> shange>) - > {system.out.out.out.out.out.t.println( "extin.") - (change.wasadded()){system.out.println( "items" + change.getaddedsublist + "が追加されましたリスト); list.set(1、 "foo"); system.out.println( "new list:" + list);上記のコードの実行中の出力は次のとおりです。
古いリスト:[foo、bar、bar] event.items [foo]が追加されました。
ご覧のとおり、設定操作はイベントを1回だけトリガーします。
4。StringConverter
バインディングを作成するときに、コンポーネントから値を抽出する必要がないことがわかります。これの典型的な例は、テキストフィールドから得られるパスを備えたStringPropertyがあることです。この値がパスとして表されている観察可能なプロパティを持ちたい場合は、StringConverterを作成する必要があります。
例:
textfield filelocation = new TextField(); StringProperty location = filelocation.TextProperty(); Property <Path> path = new SimpleObjectProperty <>(); bindings.bindbidirectional(location、path、new StringConverter <Path>(){@Override public String toString(PATH PATH){return Path.ToString();} @Override pathString(string string){return paths.get(string);}});オブジェクトプロパティは、テキストフィールドの値に対する双方向のバインディングではありません。
5。式
上記のBindingsクラスを使用すると、あらゆるタイプの式を作成できます。たとえば、ユーザーが情報を入力できる2つのテキストフィールドがあります。次に、読み取り専用ドメインを定義したいと思います。これには常に文字列が含まれます。 2つの文字列の長さが等しい場合、2つの文字列が表示される文字版の文字間隔が混合されます。長さが等しくない場合、ヘルプメッセージが表示されます。
例:
textfield first = new Textfield(); TextField second = new Textfield(); TextField Mix = new TextField(); mix.textproperty()。bind(bindings.when(first.lengthproperty()。isequalto(second.lengthproperty()))。 second.textproperty(); )。それ以外(「まったく同じ長さの2つの文字列を入力してください。」);
これは、Javafxの多くの機能のほんの少しです。このイベントシステムを活用するためのより創造的な方法を見つけることができれば幸いです!