我打算组合JMenu和JCheckBoxMenuItem,这样我就可以: (1)包含此新组件实例的弹出菜单。 (2)这个新组件在左侧有一个复选框,并且能够向右扩展并显示其他子菜单(如常规JMenu)
我有几个问题:
首先,我是否重新发明轮子? /这是在以前完成的吗?
其次,我试图弄清楚swing如何知道如何获得扩展Component类的UI类? (我看到例如JMenu有一个字符串uiClassID成员,以某种方式用于此,但它不是确切的类名...我在UIDefaults中将其调试为HashTable查找)
答案 0 :(得分:2)
我认为用户看到带有复选框的JMenu会很困惑(如果我理解正确,你想把这个东西直接放在JMenuBar中)。我不认为以前经常这样做,并且有理由这样做:)
使用的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,因此你可以放任何东西,包括普通的JCheckBoxes。这里有一个例子:http://www.javarichclient.com/do-more-with-jpopupmenu/