JavaFX 2中的PopupMenu

创建弹出菜单

要在JavaFX中创建Popupmenu,可以使用ContextMenu类。

您向其中添加MenuItems,也可以使用SeparatorMenuItem创建可视分隔符。

在下面的示例中,我选择子类ContextMenu并将MenuItems添加到其构造函数中。

public class AnimationPopupMenu extends ContextMenu{
public AnimationPopupMenu()
{
(...)
  getItems().addAll(
    MenuItemBuilder.create()
    .text(ADD_PARTICLE)
    .graphic(createIcon(...))
    .onAction(new EventHandler() {
    @Override
    public void handle(ActionEvent actionEvent) {
      // some code that gets called when the user clicks the menu item
    }
    })
    .build(),

(...)
    SeparatorMenuItemBuilder.create().build(),
    MenuItemBuilder.create()
    .text(ADD_DISTANCE_MEASURER)
    .onAction(new EventHandler() {
    @Override
    public void handle(ActionEvent actionEvent) {
      // Some code that will get called when the user clicks the menu item
    }
  })
  .graphic(createIcon(...))
  .build(),
(...)
  );
}
  • 第5行:我获得了ContextMenu的子级Collection,并调用addAll添加MenuItems。
  • 第6行:使用MenuItem构建器创建MenuItem;
  • 第7行:传入菜单项的文本。 变量ADD_PARTICLE等于“添加粒子”;
  • 第8行:调用图形,该图形接收createIcon返回的菜单项图标:
    ImageView createIcon(URL iconURL)
        {
            return ImageViewBuilder.create()
                                   .image(new Image(iconURL.toString()))
                                   .build();
        }
  • 第9行:onAction接收事件处理程序,该事件处理程序将在用户单击菜单项时调用;
  • 第15行:最后,通过在MenuItemBuilder类上执行build()创建MenuItem;
  • 第18行:创建分隔符,您可以在本文开头的图中看到该分隔符。 这是“添加原点”和“添加距离测量器”之间的虚线;
  • 其他代码行仅重复相同的过程即可创建其余菜单项。



在JFXPanel中使用JavaFX弹出菜单
如果将JavaFX场景嵌入到Swing应用程序中,则必须手动执行一些额外的步骤,否则,弹出菜单上将没有悬停动画,并且当用户单击外部时不会自动将其关闭它的。 为此有一个针对JavaFX 3.0的修复程序– http://javafx-jira.kenai.com/browse/RT-14899 首先,您必须要求将焦点集中在javafx容器上,以便弹出窗口获得悬停动画,并且当您在应用程序窗口外单击时,将其关闭。 就我而言,我在弹出菜单的构造函数上传递了对javafx swing容器的引用,然后我覆盖了ContextMenu的show方法,以便在实际显示弹出窗口之前请求将焦点放在swing容器上:

public void show(Node anchor, MouseEvent event)
{
  wrapper.requestFocusInWindow();
  super.show(anchor, event.getScreenX(), event.getScreenY());
}

最后,当用户在javafx场景内但在弹出窗口之外单击时,您还必须通过调用hide()来关闭弹出窗口。
我几乎忘了..感谢Martin Sladecek(Oracle JavaFX团队)为我提供了一些建议。

参考:来自JCG合作伙伴的 JavaFX 2中的PopupMenu   Pixel Duke博客上的Pedro Duque Vieira。


翻译自: https://www.javacodegeeks.com/2012/02/popupmenu-in-javafx-2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值