JavaFX 2自定义弹出窗格

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

我想做类似的事情,因为我想要一个自定义窗格弹出当按钮被点击时消失,当别的东西点击(在我的情况下,几个图像缩略图).什么是实现这一目标的最佳途径?我应该使用一个ContextMenu,并将一个窗格添加到一个MenuItem不知何故,还有什么我应该看看?

最佳答案
对于目前的JavaFX 2.2 API来说,很难做到.

这里有一些选择.

在MenuItem中使用一个带有图形集的MenuButton

这是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上使用CustomMenuItemsetting a graphic来执行此操作. ContextMenu的颜色很好relative positioning logic. ContextMenu也可以由MenuButton触发.

使用自定义对话框

为此,在相对于节点的位置显示透明阶段.

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

使用玻璃面板

要做到这一点,创建一个StackPane作为您的主窗口的根.将您的主内容窗格放置在StackPane中的第一个节点,然后创建一个组作为stackpane中的第二个节点,以便它将层叠在主要内容的顶部.通常,顶部组不包含任何内容,但是当您想要显示弹出窗口时,将其放置在顶部组中,并将其转换为相对于主要内容中适当节点的位置.

您可以查看this demo中的锚节点如何用于查看这可能适应您的上下文.

Is there a relevant update for this for JavaFX8?

与Java 8的相关性没有太大差异,一般来说,这些选项就是基于Java 2.2功能的这篇文章所概述的. Java 8增加了DialogAlert功能,但更为针对性地使用具有边框,标题和按钮的对话框,而不是问题中所需的功能.也许您可能可以从Dialog类开始,并大量自定义它,以获得接近所需的东西,但是您可能更好的从空白阶段或PopupControl开始.

转载注明原文:JavaFX 2自定义弹出窗格 - 代码日志