扩展JMenu给它一个复选框?

时间:2012-09-06 20:50:01

标签: java swing jmenu jmenuitem

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

我有几个问题:

首先,我是否重新发明轮子? /这是在以前完成的吗?

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

1 个答案:

答案 0 :(得分:2)

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

  2. 使用的UI类取决于实际的外观。请参阅javax.swing.plaf.MenuItemUI

  3. 的子类

    这里描述了关于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/