5

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

我有几个问题:

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

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

4

1 回答 1

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,因此你可以把任何东西放在那里,包括普通的 JCheckBoxes。一个例子在这里:http ://www.javarichclient.com/do-more-with-jpopupmenu/

于 2012-09-06T21:17:41.490 回答