4

昔は、JavaFXで提供されているものと同様のプロパティとリスナーを複数回実装していました。

私は自分で発明したものよりも広くサポートされているパッケージを使用することを常に好むので、次のプロジェクトでJavaFXプロパティを使用したいと思っていますが、その前に、次の質問に対する回答を得たいと思います。

GUIとは関係がないが、システム状態を監視および制御するためにリスナーを変更することでメリットが得られるソフトウェアでは、JavaFXによって提供されるプロパティメカニズムを選択する必要がありますか、それとも他に利用できるものがありますか?...または私はまだこのメカニズムを自分で実装する必要がありますか?

よろしく、フレドリック

4

2 に答える 2

2

非 UI 関連のロジックに javaFX プロパティを商用製品で約 1 年間使用した後、以下に 2 セントを示します。

UI 関連のプロパティとビジネス ロジック関連のプロパティを混在させることはお勧めできません。

両方の種類が互いに相互作用する必要がない場合、それはうまく機能します。しかし、UI 要素をビジネス ロジック プロパティにバインドし始めると、問題が発生します。その理由は、バスネス ロジック コードを専用スレッドで実行することが多く、このスレッドがバインディングの一部であるプロパティを更新すると、次の例外が発生するためです。

java.lang.IllegalStateException: FX アプリケーション スレッドではありません。

簡単な修正は、プロパティ値を変更するコード ブロックを移動することです。

Platform.runLater(...)

呼び出し...しかし、ビジネスロジックコードにjavaFXフレームワークに依存するコードがいくつかあります。したがって、このコードを Swing アプリケーションで再利用したり、単純に JUnit テストでテストしたりすると、そこでもエラーが発生します。

java.lang.IllegalStateException: ツールキットが初期化されていません

JavaFX ツールキットの初期化が必要な Platform.runLater() を使用しているため、これは単体テストまたは swing/javaee アプリケーションには当てはまりません。

まとめると、非 UI コードに javafx プロパティを使用することは可能ですが、重要な副作用が生じる可能性があります...

于 2015-04-08T18:36:22.800 に答える
1

JavaFX プロパティ メカニズムが機能するはずです。これらは JavaFX GUI をサポートするために作成されましたが、GUI 以外のロジックでも問題なく動作するはずです。どのフレームワークがあなたのニーズによりよく対応できるかについて、他の競合フレームワークと話すことはできません.


JavaFX でプロパティをサポートするためのクラスの数を見ると、少し気が遠くなるかもしれませんが、それらは非常にうまくまとまる傾向があり、オブジェクトとプリミティブのインピーダンスの不一致を保護するために多くのクラスが存在します。そのような機能の言語サポートが改善されていないのは残念です。IDE とオートコンプリートを使用したプログラミングは非常にうまく機能するため、入力する必要はありません。リスナーは jdk8 ラムダ式に折りたたまれるため、非常に簡潔になります。

バインディング フレームワークとリスナー フレームワークは、JavaFX コントロールを簡単に適応させて利用できるようにするための一部であり、システムのすべての項目の変更通知へのフックを提供します。

JavaDocが利用可能です。残念ながら、バインディングコレクションに関する公式ドキュメントは、その機能セットの使用方法を完全に説明することにおいて、ライブラリの正当性を示していません。POJO での JavaFX プロパティの使用に関する便利な記事があります。

JavaFX の Bean、バインディング、およびプロパティ サポートのソースはまだ公開されていません (ただし、今後数か月で公開される予定です)。


jdk7u6 より新しいバージョンの Java を使用jfxrt.jarし、ディストリビューションからのファイルがクラスパス上にあることを確認して、JavaFX クラスを取得します。GUI コンポーネントを使用していない場合はApplication、プログラムで JavaFX クラスを拡張する必要はありません。


考慮すべき関連する非 GUI パッケージは次のとおりです。

javafx.beans パッケージ javafx.beans には、可観測性の最も一般的な形式を定義するインタフェースが含まれています。

javafx.beans.binding バインディングの特徴

javafx.beans.propertyパッケージ javafx.beans.property は、読み取り専用プロパティと書き込み可能なプロパティに加えて、多数の実装を定義します。

javafx.beans.property.adapter (標準の pojo Bean を JavaFX プロパティに適合させます)。

javafx.beans.value パッケージ javafx.beans.value には、2 つの基本インターフェース ObservableValue および WritableValue とそのすべてのサブインターフェースが含まれています。

javafx.animation トランジション ベースのアニメーション (GUI 以外のタイミングに関連する部分) を使いやすくするためのクラスのセットを提供します。

javafx.collections 基本的な JavaFX コレクションとコレクション ユーティリティが含まれています

javafx.util.converterこのパッケージは、JavaFX の標準文字列コンバーター用です。

于 2012-12-20T12:44:42.487 に答える