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

Java 如何在调用JMenu.addSeparator()后删除它,java,swing,jmenu,jseparator,Java,Swing,Jmenu,Jseparator,大家好 我只是想问一下,在调用JMenu.addSeparator()之后是否可以删除它?例如,在我的表单中有一个菜单栏,在菜单栏中有三个JmenuItems,每个都有JMenu.addSeparator()。我想做的是,如果另一个用户登录,我想setVisible(false)JMenuItem中的一个,因为中的特定用户没有授权使用该JMenuItem。问题是当我的代码> SETVICE(false) < JMunuItIs>代码> jLoop.AdjultAccor()/仍然存在,因为没

大家好

我只是想问一下,在调用
JMenu.addSeparator()之后是否可以删除它?例如,在我的表单中有一个菜单栏,在菜单栏中有三个
JmenuItems
,每个都有
JMenu.addSeparator()
。我想做的是,如果另一个用户登录,我想
setVisible(false)
JMenuItem
中的一个,因为中的特定用户没有授权使用该
JMenuItem
。问题是当我的代码> SETVICE(false) < <代码> JMunuItIs>代码> <代码> jLoop.AdjultAccor()/<代码>仍然存在,因为没有<代码>,JMunuItIt/<代码>存在于两个<代码> jLoop.AdDealStudio()/<代码>的中间。希望你能帮我解决这个问题。
提前感谢

您有两种可能的解决方案

你可以。。。 删除菜单的内容,并根据用户可以执行的操作重建菜单

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...
这将是我的首选解决方案

你可以。。。 根据当前用户的实际操作隐藏/显示菜单项,然后删除彼此相邻的所有
jsepator
s,例如

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

就我个人而言,我知道我更喜欢哪一个,通常来说,哪一个会产生一致的结果…

我遇到了一种情况,我不得不从现有菜单中删除分隔符。(旧代码,不允许重构整个混乱。)

所以我使用了MadProgrammer的第二个解决方案的想法,但重写了它以使其实际工作

        Component last = null;
        for (int idx = 0; (idx < m_fileMenu.getMenuComponentCount()); idx++) {
            Component comp = m_fileMenu.getMenuComponent(idx);
            if (comp instanceof JPopupMenu.Separator && last instanceof JPopupMenu.Separator) {
                m_fileMenu.remove(comp);
                idx--;
            } else {
                last = comp;
            }
        }
Component last=null;
对于(int idx=0;(idx
每个用户从头开始重建菜单可能更容易。从头开始重建菜单是什么意思?我就是这个意思。当用户登录时,而不是“隐藏”或“显示”菜单项,您将从头开始重建整个
JMenu
,只添加当前用户可以实际使用的菜单项……实际上这是我的第一个想法,但我想如果我只做“隐藏”或“显示”,可能会更容易当前用户可以实际使用的菜单项。因此,您需要在
JMenu
中查看两个
jsepator
s是否相邻…我知道,就我个人而言,什么对我来说更容易;)这是我的问题之一,因为我的代码结构不一致,我很难产生一致的结果。因为我没有遵循正确的代码构建,这非常令人沮丧。