扩展JMenu给它一个复选框?

Rob*_*ert 5 java swing jmenuitem jmenu

我正在计划组合JMenu和JCheckBoxMenuItem,所以我可以:(1)一个包含这个新组件实例的弹出菜单.(2)这个新组件左侧有一个复选框,并且能够向右扩展并显示其他子菜单(如常规JMenu)

我有几个问题:

首先,我是否重新发明轮子?/这是以前做过的吗?

其次,我试图弄清楚swing如何知道如何获得扩展Component类的UI类?(我看到例如JMenu有一个字符串uiClassID成员,它以某种方式用于此,但它不是确切的类名...我在UIDefaults中将其调试为HashTable查找)

lba*_*scs 2

  1. 我认为用户看到带有复选框的 JMenu 会感到困惑(如果我理解正确的话,你想把这个东西直接放在 JMenuBar 中)。我认为以前很少这样做,这是有原因的:)

  2. 使用的 UI 类取决于实际的外观。查看 javax.swing.plaf.MenuItemUI 的子类

有关 Swing 架构的完整故事如下所述:http://java.sun.com/products/jfc/tsc/articles/architecture/

外观实现为每个抽象 plaf UI 类提供了具体的子类。例如,Windows 外观定义了 WindowsButtonUI、WindowsScrollBarUI 等。当组件安装其 UI 委托时,它必须有一种方法来动态查找当前默认外观的适当具体类名。此操作使用哈希表执行,其中键由组件中的 getUIClassID() 方法以编程方式定义。约定是对这些键使用 plaf 抽象类名称。

编辑:如果您想将其放入弹出菜单中,请注意 JPopupMenu 是 JComponent,因此您可以在那里放置任何内容,包括普通的 JCheckBox。一个例子在这里: http: //www.javarichclient.com/do-more-with-jpopupmenu/