JavaFX 2自定义弹出窗格

时间:2012-10-03 22:47:52

标签: popup javafx-2 javafx

JavaFX 2颜色选择器有一个按钮,弹出一个颜色选择器窗格,如下所示:

JavaFX 2 colour picker

我想做类似的事情,因为我想在单击按钮时弹出自定义窗格,在单击其他内容时消失(在我的情况下,一些图像缩略图)。实现这一目标的最佳方式是什么?我应该使用ContextMenu并以某种方式向MenuItem添加一个窗格,还是应该看一下其他内容?

1 个答案:

答案 0 :(得分:28)

使用当前的JavaFX 2.2 API很难做到。

以下是一些选项。


使用带有图形集的MenuButton的MenuItem

这是Button with popup showed below的可执行文件sample code中采用的方法。

wizpopup


使用PopupControl

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

ColorPicker扩展PopupControl。您可以这样做,但并非构建您自己的PopupControl所需的所有API目前都是公开的。因此,对于JavaFX 2.2,您将不得不依赖于已弃用的内部com.sun类,并将被JDK8中的公共javafx.scene.control类替换。


使用ContextMenu

因此,我认为您“使用ContextMenu并向MenuItem添加窗格”的想法可能是目前最好的方法。您应该可以在正常MenuItem上使用CustomMenuItemsetting a graphic来执行此操作。 ContextMenu很不错relative positioning logicContextMenu也可以触发{{1}}。


使用自定义对话框

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

有一些示例代码可以帮助您开始我暂时链接MenuButton。 示例代码对主窗口的侧面进行相对定位,但您可以更新它以执行相对于给定节点侧面的定位(如ContextMenu的show方法)。


使用Glass Pane

为此,请创建一个StackPane作为主窗口的根目录。将主内容窗格作为StackPane中的第一个节点,然后创建一个Group作为stackpane中的第二个节点,以便它将覆盖主要内容的顶部。通常,顶部组不包含任何内容,但是当您想要显示弹出窗口时,将其放在顶部组中并将其转换为相对于主要内容中相应节点的位置。

您可以查看here中的锚点节点如何用于查看它如何适应您的上下文。


  

JavaFX8是否有相关的更新?

Java 8的相关性没有太大差异,一般来说,这些选项基于Java 2.2功能在本文中列出。 Java 8确实添加了this demoDialog功能,但这些功能更多地针对使用带边框,标题和按钮的对话框,而不是问题中所需的功能。也许你可以从Dialog类开始并大量定制它以获得接近所需的东西,但你最好从空白阶段或PopupControl开始。