java - 如何在调用 JMenu.addSeparator() 后删除它

标签 java swing jmenu jseparator

大家好,

我只是想问一下JMenu.addSeparator()在调用后是否可以删除?例如,在我的表单中,有一个菜单栏,菜单栏中有三个 JmenuItems,每个项目都有 JMenu.addSeparator()。我想要做的是,如果不同的用户登录,我想要 setVisible(false) JMenuItem 之一,因为该特定用户未授权使用该 JMenuItem。问题是当我setVisible(false)其中一个JMenuItem时,JMenu.addSeparator()仍然存在,这看起来有点尴尬,因为有两个 JMenu.addSeparator() 中间不存在 JMenuItem。希望你能帮助我解决这个问题。 提前致谢

最佳答案

您有两种可能的解决方案...

你可以...

删除菜单内容并根据用户可以执行的操作重新构建...

menu.removeAll();
// Add menu items back in...
// Personally, I'd have some method that could return back all
// the JMenuItems that could appear on this menu based on the
// the user...

这将是我首选的解决方案...

你可以...

根据当前用户实际可以执行的操作隐藏/显示菜单项,然后删除所有相邻出现的 JSeparator,例如...

Component last = null;
for (Component comp : menu.getComponents()) {
    if (comp instanceof JSeparator && last instanceof JSeparator) {
        menu.remove(comp);
    } else {
        last = comp;
    }
}

就我个人而言,我知道我更喜欢哪个,并且通常会产生一致的结果......

关于java - 如何在调用 JMenu.addSeparator() 后删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21743599/

相关文章:

java - 控制台上的 log4j 信息

java - javax.swing 中的 Unicode 字符仅在使用默认字体大小时显示

Java GUI 菜单问题

java - java中jmenu项的setAccelerator

java - Wildfly 14 是否支持 OpenJDK 11 或任何其他版本的 OpenJDK?

java - 消息 : Invalid byte 1 of 1-byte UTF-8 sequence in hadoop

java - 有效地查找正则表达式的所有重叠匹配项

java - 将多个图形添加到单个 JPanel

java - 处理多个 JFrame

java - 在不关闭菜单的情况下在菜单中动态添加菜单项