JavaFX 2 颜色选择器有一个按钮,可以弹出颜色选择器窗格,如下所示:
我想做类似的事情,因为我希望在单击按钮时弹出一个自定义窗格,并在单击其他内容时消失(在我的情况下,是一些图像缩略图)。实现这一目标的最佳方法是什么?我应该使用 ContextMenu 并以某种方式将窗格添加到 MenuItem,还是我应该查看其他内容?
使用当前的 JavaFX 2.2 API 很难做好。
这里有一些选项。
使用在其 MenuItem 中设置图形的 MenuButton
这是Button with popup 中采用的方法,如下所示的可执行示例代码。
使用弹出控件
看看 ColorPicker 如何在其代码中执行此操作。
ColorPicker 扩展PopupControl。您可以这样做,但目前并非所有构建您自己的 PopupControl 所需的 API 都是公开的。因此,对于 JavaFX 2.2,您将不得不依赖已弃用的内部 com.sun 类,这些类将被 JDK8 中的公共 javafx.scene.control 类取代。
使用上下文菜单
因此,我认为您“使用 ContextMenu 并向 MenuItem 添加窗格”的想法可能是目前最好的方法。您应该能够通过使用CustomMenuItem或在 normal 上设置图形MenuItem
来做到这一点。ContextMenu
有很好的相对定位逻辑。AContextMenu
也可以由MenuButton触发。
使用自定义对话框
为此,请在相对于节点的位置显示透明阶段。
有一些示例代码可以帮助您入门,我已在此处临时链接。示例代码对主窗口的侧面进行相对定位,但您可以对其进行更新以执行相对于给定节点侧面的定位(如 ContextMenu 的 show 方法)。
使用玻璃窗格
为此,请创建一个 StackPane 作为主窗口的根。将主内容窗格放置为 StackPane 中的第一个节点,然后创建一个组作为 stackpane 中的第二个节点,以便它将覆盖在主要内容的顶部。通常,顶部组不包含任何内容,但是当您想要显示弹出窗口时,请将其放在顶部组中并将其转换为相对于主要内容中相应节点的位置。
您可以查看此演示中的锚节点是如何使用的,以了解它如何适应您的上下文。
JavaFX8 是否有相关更新?
Java 8 的相关性没有太大差异,一般来说,这些选项是基于 Java 2.2 功能在这篇文章中概述的。Java 8 确实添加了Dialog和Alert功能,但它们更针对使用带有边框、标题和按钮的对话框,而不是问题中所需的那种功能。也许您可以从 Dialog 类开始并对其进行大量自定义以获得接近所需的内容,但您可能最好从空白阶段或 PopupControl 开始。