Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展JMenu以给它一个复选框?_Java_Swing_Jmenu_Jmenuitem - Fatal编程技术网

Java 扩展JMenu以给它一个复选框?

Java 扩展JMenu以给它一个复选框?,java,swing,jmenu,jmenuitem,Java,Swing,Jmenu,Jmenuitem,我计划将JMenu和JCheckBoxMenuItem结合起来,这样我就可以: (1) 包含此新组件实例的弹出菜单。 (2) 这个新组件将在左侧有一个复选框,并且能够向右扩展并显示其他子菜单(如常规JMenu) 我有几个问题: 首先,我是在重新发明轮子吗?/这以前做过吗 其次,我试图弄清楚swing如何知道如何获取扩展组件类的UI类?(例如,我看到JMenu有一个字符串uiClassID成员,不知何故用于此,但它不是确切的类名……我在UIDefaults中将其调试为哈希表查找) 我认为,如果用户

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

我有几个问题:

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

其次,我试图弄清楚swing如何知道如何获取扩展组件类的UI类?(例如,我看到JMenu有一个字符串uiClassID成员,不知何故用于此,但它不是确切的类名……我在UIDefaults中将其调试为哈希表查找)

  • 我认为,如果用户看到带有复选框的JMenu,就会感到困惑(如果我理解正确,您希望将它直接放在JMenuBar中)。我认为以前很少这样做,这是有原因的:)

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

  • 关于Swing体系结构的完整故事如下所述:

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


    编辑:如果您想将其放在弹出菜单中,请注意jpopmpmenu是一个JComponent,因此您可以将任何内容放在那里,包括普通的jcheckbox。这里有一个例子:

    另请参见。不知道您在说什么,为了获得更好的帮助,请尽快发布一篇文章,详细描述您的4-5个问题。该级别的复选框代表什么?如果所有的JMenuItem都是复选框,并且它表示它们都被选中了,那么我可以看到它,但是我不知道。比尔,JMenuItem的复选框应该启用/禁用其JCheckBoxMenuItem子项的复选框。对于(1)我实际上想(被告知)将它放在弹出菜单中,而不是放在JMenuItem栏中。好的,不同的外观和感觉选项是有意义的。谢谢,我来看看这个链接。我编辑了我的答案,添加了一个想法,这可能比搞乱UI委托更容易实现。我也在寻找这样的实现。@user1399747你找到方法了吗。。?