JavaFX 2自定义popup窗格

JavaFX 2颜色select器有一个button,可以popup颜色select器窗格,如下所示:

JavaFX 2颜色选择器

我想做类似的事情,因为我想要一个自定义窗格,当点击button时popup,当点击其他东西时消失(在我的情况下,几个图像缩略图)。 什么是实现这一目标的最好方法? 我应该使用ContextMenu并以某种方式向MenuItem添加一个窗格,还是应该看看其他内容?

目前的JavaFX 2.2 API很难做到。

这里有一些选项。


在MenuItem中使用带有graphics的MenuButton

popup窗口显示如下的可执行示例代码,这是在Button中采用的方法。

wizpopup


使用PopupControl

看看ColorPicker如何在代码中执行此操作 。

ColorPicker扩展了PopupControl 。 你可以做到这一点,但并非所有build立你自己的PopupControl的API都是公开的。 因此,对于JavaFX 2.2,您将不得不依赖于已弃用的内部com.sun类,它将被JDK8中的public javafx.scene.control类取代。


使用ContextMenu

所以,我认为你的想法“使用ContextMenu并添加窗格到MenuItem”可能是目前最好的方法。 您应该能够通过使用CustomMenuItem或在普通MenuItem上设置graphics来完成此操作。 ContextMenu具有很好的相对定位逻辑 。 ContextMenu也可以由MenuButton触发。


使用自定义对话框

为此,请在相对于节点的位置显示透明舞台。

有一些示例代码让你开始,我暂时在这里链接。 示例代码对主窗口的边进行相对定位,但可以更新它以执行相对于给定节点的边的定位(如ContextMenu的show方法)。


使用玻璃窗格

要做到这一点,创build一个StackPane作为你的主窗口的根。 将主内容窗格作为StackPane中的第一个节点,然后创build一个Group作为堆栈窗格中的第二个节点,以便它将覆盖主内容的顶部。 通常情况下,最上面的组不包含任何内容,但是当你想显示你的popup窗口时,把它放在最上面的组中,并把它翻译成相对于主内容中相应节点的位置。

你可以看看这个演示中的锚节点是如何被用来看看这可能适合你的上下文。


JavaFX8有没有相关的更新?

Java 8的相关性没有太大的差别,总的来说,这些选项是基于Java 2.2function的。 Java 8确实添加了对话框和警报function,但是这些function更多地针对使用带有边框,标题和button的对话框,而不是问题中所需的functiontypes。 也许你可以从Dialog类开始,并对其进行大量的定制,以获得接近需要的东西,但是你最好从空白阶段或PopupControl开始。