JavaFX 2颜色选择器有一个按钮,弹出一个颜色选择器窗格,如下所示:
我想做类似的事情,因为我想在单击按钮时弹出自定义窗格,在单击其他内容时消失(在我的情况下,一些图像缩略图)。实现这一目标的最佳方式是什么?我应该使用ContextMenu并以某种方式向MenuItem添加一个窗格,还是应该看一下其他内容?
答案 0 :(得分:28)
使用当前的JavaFX 2.2 API很难做到。
以下是一些选项。
使用带有图形集的MenuButton的MenuItem
这是Button with popup showed below的可执行文件sample code中采用的方法。
使用PopupControl
看看ColorPicker如何在code中执行此操作。
ColorPicker扩展PopupControl。您可以这样做,但并非构建您自己的PopupControl所需的所有API目前都是公开的。因此,对于JavaFX 2.2,您将不得不依赖于已弃用的内部com.sun类,并将被JDK8中的公共javafx.scene.control类替换。
使用ContextMenu
因此,我认为您“使用ContextMenu并向MenuItem添加窗格”的想法可能是目前最好的方法。您应该可以在正常MenuItem
上使用CustomMenuItem或setting a graphic来执行此操作。 ContextMenu
很不错relative positioning logic。 ContextMenu
也可以触发{{1}}。
使用自定义对话框
为此,请在相对于节点的位置显示透明舞台。
有一些示例代码可以帮助您开始我暂时链接MenuButton。 示例代码对主窗口的侧面进行相对定位,但您可以更新它以执行相对于给定节点侧面的定位(如ContextMenu的show方法)。
使用Glass Pane
为此,请创建一个StackPane作为主窗口的根目录。将主内容窗格作为StackPane中的第一个节点,然后创建一个Group作为stackpane中的第二个节点,以便它将覆盖主要内容的顶部。通常,顶部组不包含任何内容,但是当您想要显示弹出窗口时,将其放在顶部组中并将其转换为相对于主要内容中相应节点的位置。
您可以查看here中的锚点节点如何用于查看它如何适应您的上下文。
JavaFX8是否有相关的更新?
Java 8的相关性没有太大差异,一般来说,这些选项基于Java 2.2功能在本文中列出。 Java 8确实添加了this demo和Dialog功能,但这些功能更多地针对使用带边框,标题和按钮的对话框,而不是问题中所需的功能。也许你可以从Dialog类开始并大量定制它以获得接近所需的东西,但你最好从空白阶段或PopupControl开始。