13

com.sun の SkinBase および BehaviorBase クラスを使用して JavaFX で独自のカスタム コントロールを作成する例がインターネットにたくさんある理由を知っている人はいますか? なぜ彼らは使用するのですか?FXEnsemble にそのような実装がないのはなぜですか? これに関するベストプラクティスはありますか? カスタム コントロールに BehaviorBase と SkinBase を使用する理由を教えてください。前もって感謝します。

アップデート:

このビデオに出くわしました - http://www.parleys.com/#st=5&id=2789&sl=1、カスタム コントロールの作成に言及しています。著者は Public(Control & Skin) と Private API について述べていますが、実際には Behavior は Private API です。公式ドキュメントに記載されていない com.sun の BehaviorBase と SkinBase を使用することは適切ですか?

更新 2:

SkinBehaviour および JavaFX 8: http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-February/005874.html

4

2 に答える 2

20

元の回答

次の主要な JavaFX リリース (JavaFX 8.0/JDK 8.0) の配信を対象としたカスタム コントロールの構築のサポートを改善するための重要な機能要求があります。

BehaviourBase および SkinBase API が公開され、独自のカスタム コントロール (カスタム css 属性および疑似クラスの定義など) を構築するために必要なその他の作業が公開 API として公開されるまで、これらのクラスの使用に関する最良のアドバイスは、Richard Bair によるものです。 JavaFXプラットフォームリーダー:

あなたの意図が openjfx に提出するための新しいコントロールを書くことである場合。. . その後、これらのクラスを必ず使用してください。プラットフォームの将来のバージョンで動作することを意図したアプリケーションを作成していて、中断したくない場合は、これらのクラスを使用しないでください。

いずれにせよ、BehaviourBase API と SkinBase API の使用は、コントロール ライブラリの作成者 (コア JavaFX API に含めるためのopen-jfxプロジェクト用にビルドするもの、または以前にリンクされたjfxtrasプロジェクトなど) によってビルドされるコントロールを対象とするのがおそらく最適です。答え)。多くの再利用可能なカスタム アプリケーション コンポーネントは、これらのクラスを使用することによって生じる複雑さを必要としません。

ライブラリ用のジェネリック プラットフォーム コントロールを作成する場合を除き、Controlをサブクラス化する必要はありません。

  1. 既存のコントロールを使用し、CSS イベントとパブリック API を介してカスタマイズします。
  2. 既存のコントロールをサブクラス化して、より抜本的な変更を実行します。
  3. GroupやレイアウトPaneサブクラスなどのコンテナをサブクラス化する独自のクラスを作成します。サブクラスでレイアウトを処理し、複数の JavaFX ノードとコントロールの動作をカプセル化します。

コンテナから再利用可能なカスタム コンポーネントを作成する例については、FXML の概要ドキュメントのカスタム コンポーネントのセクションを参照してください。既存のコントロールをサブクラス化する例については、このJavaFX クロックの例の DigitalClock クラスを参照してください。

アップデート

この回答を書いた後、更新された回答からリンクされたコントロール作成プレゼンテーションを確認しましたが、この回答と同じ推奨事項を作成しています。このプレゼンテーションは、JavaFX コントロール作成のトピックに関心のあるすべての人にお勧めします。

2014 年 12 月の更新

JavaFX フレームワーク クラスを使用してコントロールを作成するためのパブリック API を作成するために、Java 8 で多くの作業が行われました。そのため、 Controlまたは Control サブクラスを拡張し、SkinBaseを利用する独自のカスタム コントロールを構築できます。このようなコントロールは、Label、Button などの組み込みの JavaFX コントロールと構造および API が似ています。これを行う方法に関する情報の一部は、open-jfx wiki に非公式に文書化されていますが、Oracle はまだ公開していません。メインの JavaFX ドキュメント ページで、このようなコントロールの作成に関する完全な公式ドキュメントを提供しました。

パブリック API として確定されなかった API の一部は BehaviourBase クラスであり、通常、コントロールのアクセラレータ キー コマンドなどのタスクのクロス プラットフォーム固有の実装を処理するために使用されますが、イベントまたはサード パーティを処理する基本 JavaFX キーを引き続き使用できます。 ControlsFX Actionなどのライブラリを使用してこのような動作を実装すると、将来の Java リリースで変更される可能性があるプライベート API をコードで使用する必要がなくなります。BehaviourBase 機能は現在、Java 9 のタイムフレームで公開 API クラスに移行される予定です。

元の回答で述べたように、ライブラリの汎用プラットフォーム コントロールを作成しない限り、Control をサブクラス化する必要はありません (これは、JavaFX 8 または 9 の新しいコントロール作成機能に関係なく当てはまります)。

2016年3月更新

Java 9 については、Java Enhancement Proposal (JEP) および関連する Java バグ トラッカーの問題が作成されました。

この取り組みの目的は次のとおりです。

JavaFX UI コントロールと CSS 機能のパブリック API を定義します。これは、現在内部 API を介してのみ利用可能であり、モジュール化によりアクセスできなくなります。

カスタム コントロール サポートのための API の変更に関する詳細は、リンクされた JEP およびバグ トラッカーのドキュメントに記載されています。

新しい API の変更を含む Java 9 のアーリー アクセス リリースをダウンロードしてテストすることができます。

パブリック Behavior API は Java 9 の一部ではなく、現在 Java 10 での実装が予定されていることに注意してください。

その他のリソース

カスタム JavaFX コントロールに関する詳細なリソースが必要な場合は、この件に関する Hendrik Ebbers の本を参照してください (私はこの本を読んでいません)。

于 2012-08-22T21:02:35.607 に答える
2

JFXtras プロジェクト ( http://jfxtras.org ) を参照してください。そこには、SkinBase と BehaviorBase を使用する多くのカスタム JavaFX コントロールがあります。コントロールのソース コードは、https://github.com/JFXtrasの github にあります。

于 2012-08-22T11:00:22.877 に答える