如何在JavaFX 8中为MenuItem添加外观效果?

时间:2015-02-19 17:42:01

标签: javafx material-design

我使用自定义Button类来实现Android Material Design中的效果。我是从here得到的。

我想在MenuBarMenuItem中实现相同的功能,但在此课程中,我无法覆盖createDefaultSkin()。有没有其他方法来创建这个动态背景?我已经搜索过,只找到了如何更改背景颜色或如何制作颜色的动画过渡,但没有像设置Circle这样的自定义形状,而后者是动画。

1 个答案:

答案 0 :(得分:2)

MenuItems不是控件,因此它们不能使用您已经发现的控件架构方法(如createDefaultSkin())进行换肤。你确实有几个选择。

  1. JavaFX提供CustomMenuItem类,提供configurable node content property。因此,您可以通过创建CustomMenuItem实例来自定义菜单项。

  2. 标准菜单项也可以通过setting a graphic自定义。

  3. 菜单项也可以通过操作CSS而在没有Java代码的情况下进行相当广泛的自定义,尽管在您提到的android材料设计按钮中无法实现动画效果。

  4. MenuBars是控件并具有外观实现,因此您可以为整个菜单栏提供自己的外观实现(与您提供的链接为按钮提供自定义外观实现的方式相同)。然后,自定义菜单栏皮肤负责呈现整个菜单的GUI,并且可以使用您决定提供的任何实现来执行此操作。

  5. 菜单栏是一个比按钮复杂得多的控件,因此提供自定义菜单栏皮肤是一项非常重要的任务。要了解内置的MenuBarSkin实现,您可以search the JavaFX source repository for the MenuBarSkin class。内置菜单栏可能很复杂,因为它可以使用Mac上的系统菜单功能,弹出菜单,应用程序窗口中基于场景图节点的菜单等。内置的实现处理一些UI菜单栏本身的功能以及在其他情况下委托从菜单项,各种Java帮助程序类以及最终底层OS窗口工具包支持菜单显示和管理中获取自定义节点内容。