web-dev-qa-db-ja.com

JavaFX2カスタムポップアップペイン

JavaFX 2カラーピッカーには、次のようにカラーチューザーペインをポップアップするボタンがあります。

JavaFX 2 colour picker

ボタンがクリックされるとカスタムペインがポップアップし、他の何か(私の場合はいくつかの画像サムネイル)がクリックされると非表示になるという点で、同様のことをしたいと思います。これを達成するための最良の方法は何でしょうか? ContextMenuを使用して、なんらかの方法でMenuItemにペインを追加する必要がありますか、それとも他に確認する必要があるものがありますか?

18
Michael Berry

現在のJavaFX2.2APIでうまくやるのはちょっと難しいです。

ここにいくつかのオプションがあります。


MenuItemにグラフィックが設定されたMenuButtonを使用します

これは、 ポップアップのあるボタンを以下に示します の実行可能ファイル サンプルコード で採用されたアプローチです。

wizpopup


PopupControlを使用する

ColorPickerがこれをどのように行うかを見てみましょう コード

ColorPickerは PopupControl を拡張します。これを行うことはできますが、独自のPopupControlを構築するために必要なすべてのAPIが現在公開されているわけではありません。したがって、JavaFX 2.2の場合、非推奨であり、JDK8のパブリックjavafx.scene.controlクラスに置き換えられる内部com.Sunクラスに依存する必要があります。


ContextMenuを使用する

したがって、「ContextMenuを使用してMenuItemにペインを追加する」というあなたのアイデアは、おそらく今のところ最善のアプローチだと思います。通常のMenuItemCustomMenuItem または グラフィックの設定 を使用してこれを行うことができるはずです。 ContextMenuにはニースがあります 相対配置ロジックContextMenuは、 MenuButton によってトリガーすることもできます。


カスタムダイアログを使用する

これを行うには、ノードを基準にした場所に透明なステージを表示します。

私が一時的にリンクしたあなたが始めるためのいくつかのサンプルコードがあります ここ 。サンプルコードはメインウィンドウの側面に対して相対的な配置を行いますが、特定のノードの側面に対して相対的な配置を実行するように更新することもできます(ContextMenuのshowメソッドなど)。


ガラス板を使用する

これを行うには、メインウィンドウのルートとしてStackPaneを作成します。メインコンテンツペインをStackPaneの最初のノードとして配置し、次にスタックペインの2番目のノードとしてグループを作成して、メインコンテンツの上に重ねるようにします。通常、最上位グループには何も含まれていませんが、ポップアップを表示する場合は、最上位グループに配置し、メインコンテンツの適切なノードを基準にした場所に変換します。

このデモ のアンカーノードがどのように使用されているかを見て、これがコンテキストにどのように適応できるかを確認できます。


JavaFX8に関連するアップデートはありますか?

Java 8の関連性に大きな違いはありません。一般に、オプションはJava 2.2機能に基づいてこの投稿で概説されているとおりです。Java 8は Dialog および Alert 機能を追加しますが、これらは、質問:Dialogクラスから始めて、必要なものに近づけるように大幅にカスタマイズできるかもしれませんが、代わりに空白のステージまたはPopupControlから始める方がよいでしょう。

28
jewelsea