9

UI ノード (ラベル、ボタンなど) にプロパティを設定するには、2 つの方法があります。

次のようなものを使用できます。

Button b = new Button("Sample");
b.setTextFill( Paint.valueOf("red") );
b.setTextAlignment( TextAlignment.CENTER );

または、同等のことを行うことができます:

Button b = new Button("Sample");
b.setStyle("-fx-text-alignment: center; -fx-text-fill: red");

私が疑問に思っているのは、これらの方法の 1 つが何らかの理由 (個人的な好み以外) で望ましいのでしょうか?

4

2 に答える 2

19

これに対する答えは、個人の好みに多少左右されますが、役に立つと思われる一般的な経験則がいくつかあります。

JavaFX でのスタイリングの 4 つのオプションは次のとおりです。

  1. css スタイルシート。
  2. コードから発行された css setStyle コマンド。
  3. スタイリング用のJavaコード。
  4. スタイリング用の fxml 属性。

私のアドバイスは次のとおりです。

  1. ほとんどすべてのスタイリングに css スタイルシートを使用します。
  2. 何千ものノードがある場合、または個人的に API が提供する型の安全性と簡単なデバッグ機能を好む場合は、Java API 呼び出しを使用します。
  3. CSS を使用してのみ設定でき、APIまたはスタイルシートを使用して設定できないスタイルを動的に変更する必要がある場合にのみ、setStyle を使用します。
  4. fxml を介してスタイリングを適用しないでください。

スタイリングに css スタイルシートを使用する利点は次のとおりです。

  1. コードからスタイルを分離できます。
  2. 複数のスタイルシートを簡単に定義し、実行時にそれらを変更して、アプリケーションの外観を変えることができます。
  3. スタイリング専用に設計された言語を使用しています。
  4. SceneBuilderなどのデザイン ツールでスタイルシートを適用できます。

実際、ビジュアル デザイン ツールを使用している場合、最後のポイントは重要です。それを最大限に活用するには、CSS スタイルシートを使用する必要があります。css スタイルシートではなくコードでスタイルを適用すると、ビジュアル デザイン ツールでアプリケーションをデザインしようとしているときに、アプリケーションがどのように見えるかを実際に視覚化することはできません。fxml 属性を介してスタイルを適用すると、アプリケーションの構造とレイアウト、およびそのスタイルの両方を定義するため、fxml は扱いにくくなります。一般に、これらの懸念事項を分離するのが最善です。

コードで setStyle 呼び出しを使用することもありますが、ほとんどの場合、推奨される方法ではなく、怠惰のためです。

setStyle を使用してスタイルを動的に変更する必要があるのは、非常に限られた場合です。たとえば、JavaFX 2.2 では、API を介して領域の背景色を設定することはできません。スタイルクラスを使用して設定できます。しかし、背景色をユーザーが選択した色に動的に設定したい場合は、次のような setStyle メソッドを使用できますbutton.setStyle("-fx-text-fill: " + userColor.toString() + ";");。だから、本当にかなり専門的です。

また、JavaFX 8 では、CSS によって JavaFX 2.2 でのみ実行できるいくつかのこと (領域の背景の設定など) は、Java API を介してコードで実行できることに注意してください。領域の背景にユーザー塗りつぶしの色を設定する上記の例では、JavaFX 8 が使用されている場合、これに Java API を使用することをお勧めします。

さまざまな使用例のパフォーマンスへの影響に関して。私の理解 (フォーラムの JavaFX css 実装メンテナーによるコメントから) では、ほとんどの場合、最もパフォーマンスの高いものから最もパフォーマンスの低いものへのパフォーマンスの順序は次のようになります。

  1. ダイレクト API 呼び出し。
  2. FXML によるスタイル。
  3. styleclass を介して適用されるスタイル。
  4. setStyle 呼び出し。

JavaFX の css アプリケーションは非常に効率的に設計されているため、多くの場合、パフォーマンスは重要な考慮事項ではないことに注意してください。私の推測では、css の使用によるパフォーマンスへの大きな影響があるのは、何千ものノードがスタイル設定されている場合のみであると推測されますが、その推測を裏付ける確かなデータはありません。

以前、JavaFX プログラマーが、css を使用せず、アプリケーションのスタイリングに JavaFX API を使用することを好むというコメントを見てきました。与えられた理由は、デバッグが容易であること、すべてが単一の言語であること、メソッド名を支援するための IDE とのより良い統合、編集時およびコンパイル時の静的型チェックなどです。また、css ではなく Java API を使用してスタイルを設定することを好む場合これらの理由により、独自のコードでは、これで問題ありません。しかし、Java API だけを使用して必要なすべてのスタイリングを実現することはできません。

css の使用と、JavaFX での使用方法に関する知識は、JavaFX テクノロジーに習熟するために不可欠です。これの主な理由は、JavaFX のすべてのコア コントロールが css によってスタイル設定されているためです。最も単純な JavaFX アプリケーションでさえ、通常はこれらのコントロールを利用します。また、それらの外観をカスタマイズできるようにしたい場合は、css を理解する必要があります (標準の JavaFX css スタイルシートを読んで、標準コントロールはスタイル設定されています)。また、標準コントロールのカスタマイズに関しては、通常、css カスタム スタイルシートを適用する方が簡単です。

于 2013-02-07T19:26:06.293 に答える
5

これについては議論の余地があると思いますが、私の意見では、過去に戻って何を達成したいのかを確認することです。スタイルを変更する予定がある場合は、外部CSSファイルで定義すると非常にきれいになります。その後、スタイルを後で変更する (またはユーザーがスタイルを変更できるようにする) と、1 か所で変更されます。

Button b = new Button("Sample");
b.setStyleClass("myClass");

JavaFXアプローチでうまく機能しMVCます。スタイリングは間違いなくビューに含まれます。すべてを 1 か所に保管してください。なぜそこに保管しないのですか?

また、コードをすっきりさせるにはどうすればよいでしょうか? 読みやすい?これを維持するのは、あなたや他の誰かにとってどれくらい簡単でしょうか?

于 2013-02-07T19:25:42.640 に答える