JavaFX 2カラーピッカーには、次のようにカラーチューザーペインをポップアップするボタンがあります。
ボタンがクリックされるとカスタムペインがポップアップし、他の何かがクリックされると非表示になるという点で、同様のことをしたいと思います(私の場合はいくつかの画像サムネイル)。これを達成するための最良の方法は何でしょうか?ContextMenuを使用して、何らかの方法でMenuItemにペインを追加する必要がありますか、それとも他に確認する必要があるものがありますか?
現在の JavaFX 2.2 API でうまくやるのはちょっと難しいです。
ここにいくつかのオプションがあります。
MenuItem にグラフィックが設定された MenuButton を使用する
これは、以下の実行可能なサンプル コードに示されているポップアップ付きのボタンで採用されたアプローチです。
PopupControl を使用する
ColorPicker がコードでこれを行う方法を見てください。
ColorPicker はPopupControlを拡張します。これを行うことはできますが、独自の PopupControl を構築するために必要な API のすべてが現在公開されているわけではありません。そのため、JavaFX 2.2 の場合、廃止され、JDK8 の public javafx.scene.control クラスに置き換えられる内部 com.sun クラスに依存する必要があります。
ContextMenu を使用する
したがって、「ContextMenu を使用して、MenuItem にペインを追加する」という考えが、現時点ではおそらく最良のアプローチだと思います。CustomMenuItemを使用するか、法線にグラフィックを設定することで、これを実行できるはずですMenuItem
。には、ContextMenu
適切な相対配置ロジックがあります。Aは、 MenuButtonContextMenu
によってトリガーすることもできます。
カスタム ダイアログを使用する
これを行うには、ノードに相対的な位置に透明なステージを表示します。
開始するためのサンプル コードがいくつかあります。ここに一時的にリンクしています。サンプル コードは、メイン ウィンドウの側面に対して相対的な配置を行いますが、特定のノードの側面に対して相対的な配置を実行するように更新することができます (ContextMenu の show メソッドのように)。
ガラス板を使用する
これを行うには、メイン ウィンドウのルートとして StackPane を作成します。メイン コンテンツ ペインを StackPane の最初のノードとして配置し、スタックペインの 2 番目のノードとしてグループを作成して、メイン コンテンツの上に重ねるようにします。通常、トップ グループには何も含まれていませんが、ポップアップを表示したい場合は、ポップアップをトップ グループに配置し、メイン コンテンツの適切なノードに関連する場所に変換します。
このデモのアンカー ノードがどのように使用されているかを見て、これがコンテキストにどのように適応できるかを確認できます。
これに関連する JavaFX8 の更新はありますか?
Java 8 との関連性に大きな違いはありません。一般に、オプションは Java 2.2 の機能に基づいてこの投稿で概説されているとおりです。Java 8 はダイアログとアラート機能を追加しますが、それらは、質問で必要な種類の機能ではなく、境界線、タイトル、ボタンを使用したダイアログの使用を対象としています。おそらく、Dialog クラスから始めて、それを大幅にカスタマイズして必要なものに近づけることができるかもしれませんが、代わりに空のステージまたは PopupControl から始める方がよいでしょう。