2012-10-03 2 views
15

はJavaFXの2カラーピッカーがそうのようなカラーチューザ区画をポップアップ表示のボタンがあります。のJavaFX 2カスタムポップアップウィンドウ

JavaFX 2 colour picker

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

答えて

23

現在のJavaFX 2.2 APIでうまくいくのは難しいことです。

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


それにグラフィックセットでメニューボタンを使用し

のMenuItemだこれはButton with popup showed belowの実行可能sample codeで撮影したアプローチです。

wizpopup


ColorPickerのは、それcodeだでこれを行う方法を見てみましょうPopupControlに

を使用してください。

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


そうたContextMenu

を使用して、私は思う「のContextMenuを使用してのMenuItemにペインを追加」するためにあなたのアイデアは、おそらく今の最善のアプローチです。通常MenuItemCustomMenuItemまたはsetting a graphicを使用してこれを行うことができます。 には素敵なrelative positioning logicがあります。 ContextMenuは、MenuButtonによってトリガすることもできます。


使用カスタムダイアログ

これを行うには、ノードに対する位置に透明ステージを表示します。

私は一時的にhereにリンクしているいくつかのサンプルコードがあります。 サンプルコードは、メインウィンドウの両側に相対的な位置付けを行いますが、ContextMenuのshowメソッドのように、指定されたノードの辺を基準にして位置決めを実行するようにサンプルコードを更新できます。


あなたのメインウィンドウのルートとしてStackPaneを作成し、これを行うにはガラスペイン

を使用してください。主コンテンツペインをStackPaneの最初のノードとして配置し、スタックペインの2番目のノードとしてグループを作成して、メインコンテンツの上に重ねるようにします。通常、トップグループには何も含まれていませんが、ポップアップを表示する場合は、トップグループに配置し、メインコンテンツの適切なノードに関連する位置に変換します。

this demoのアンカーノードを使用して、これがあなたのコンテキストにどのように適応できるかを見ることができます。


JavaFX8ため、このための関連する更新はありますか?

Java 8との関連性はあまりありません。一般的に、このオプションはJava 2.2の機能に基づいて説明されています。 Java 8にはDialogAlertの機能が追加されていますが、それらは目的の機能ではなく、境界線、タイトル、ボタンの付いたダイアログの使用をターゲットにしています。おそらくDialogクラスから始めて、必要なものに近いものを得るために大きくカスタマイズすることができますが、代わりに空のステージやPopupControlから始めるほうがよいでしょう。

+0

素晴らしい、良い概要、ありがとう! JavaFX8 ...などの人生は私が欲しいと思うことがたくさんあるようです。 – berry120

+0

「コンテキストメニューの使用」の例を挙げることができますか? – TomJ

+0

私は、手動配置でカスタムコンポーネントに対してsetManged(false)を使用した例を見たいと思います。 – T3rm1