11

私は Web ベースのプログラミング (php、jsf、...) のバックグラウンドと、swing と swt の最小限のバックグラウンドを持っています。

現在、新しいデスクトップ アプリケーション用の Java fx 2.x を検討していますが、実際の G​​UI の構築に関するベスト プラクティスについて疑問に思っています。fxml を使用して宣言的なルートに進むことも、手続き的なルートに進むこともできます。現在、いくつかの簡単なプロトタイピングのために後者を行っていますが、fxml を使用する説得力のある理由があるかどうか疑問に思っていました。

アップデート

最終的に、私は平均的な規模のプロジェクトで FXML の道を選びました。シーン ビルダーのベータ版は私の Linux システムではまだ不安定ですが、元のプロシージャル プロトタイプよりもはるかに優れていることが証明されています。最大の利点は、多くの要素 (特に hbox、vbox、ラベル、タブなど) が fxml にのみ存在するため、コードが乱雑にならなくなったことです。

4

4 に答える 4

16

オラクルの推奨事項

オラクルのアドバイスを参照してください。

  1. FXML を使用する理由
  2. JavaFX ベスト プラクティスの実装

Oracle では、Java API よりもレイアウト定義に FXML をお勧めしています。

JavaFX の代替宣言テクノロジ

JavaFX のその他の宣言部分は、CSS3D モデルです。

半宣言型のメソッドはJavaFX ビルダー APIですが、ビルダー API は将来の JavaFX バージョンで非推奨になるため、これは避けたほうがよいでしょう。

さらに、他の言語でプログラミングする場合、JavaFX 開発用の宣言型ドメイン固有言語 (DSL) が組み込まれているものもあります (例: ScalaFXGroovyFX )。

一般に、UI マークアップ タスクの大部分では、宣言型構文の使用が主に手続き型プログラミングに勝っています。これは、HTML、CSS、FXML、XAML、MXML、XUL などのテクノロジーの卓越性によって見られます。

低レベルのプログラミング

カスタム JavaFX コントロールの開発、JavaFX キャンバスの操作、画像データの処理などの低レベルのタスクには、宣言型 FXML を使用するよりも手続き型 Java API が最適です。openjfx のJavaFX コードベースはどれも FXMLを使用しません。

個人的な選択とアドバイス

結局、ここに正解はありません。選択は開発者に任されており、開発者が最も好むアプローチを選択できます。

また、2 つのスタイルを自由に組み合わせることができない理由もありません。単純な宣言型アプローチを使用すると、手続き型アプローチと宣言型アプローチの両方を組み合わせたもの (例: html + javascript + ajax) と比較して、非常に厳格な UI (静的 html ページなど) になります。JavaFX の場合も同様です。この場合のhtml開発用。

小さなプログラムの場合、IDE でコードを書き、それをコンパイルして実行するだけで、XML ベースの FXML と Java コードの間のコンテキスト スイッチを処理する必要がありません。しかし、この手続き型のみのアプローチは、大規模なプロジェクトにうまく拡張できないことがわかりました。ビューを FXML に分離することで、関心の分離とモジュール化を強化できます。FXML が要求する人為的な分離なしに、これらのビューとロジックの問題を混在させることは非常に簡単です。

UI レイアウト言語としての XML はあまり好きではありません。廃止された JavaFX 1.x ブランチの現在は機能していない FXD 形式の方がはるかに優れていたと思います。ただし、FXML は JavaFX 2 で最もアクセスしやすく、広く使用されている宣言型 UI 構文です。

私は JavaFX プログラムで CSS をよく使用し、FXML 宣言型コードと Java API 手続き型コードの両方で CSS を使用するのが好きです。私の意見では、スタイルをコードから分離することは、レイアウトをコードから分離することと少なくとも同じくらい重要です。

CSS を使用する場合は、スタイルをコードにインライン化するのではなく、スタイルを別のスタイル シートに配置することをお勧めします。

別の回答で指摘されているように、JavaFX SceneBuilder ビジュアル デザイン ツールは現在、FXML でのみ動作し、他のことはさておき、多くの人が FXML を使用して JavaFX UI を定義するのに十分な理由です。

于 2013-04-23T23:04:53.783 に答える
2

レイアウト (FXML) をアプリケーション コードから分離している場合、一部の UX 担当者に、IDE 全体を要求するのではなく、SceneBuilder のみを使用してレイアウトの作業を依頼できる可能性が高くなります。

于 2013-04-23T08:50:26.863 に答える
2

fxml を使用する理由は、Scene Builder で生成できるためです。手でレイアウトをいじりたくありません...

于 2013-04-23T07:14:06.897 に答える