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

时间:2014-02-13 01:42:29

标签: java swing jmenu jseparator

大家好,

我只是想问一下,在调用JMenu.addSeparator()后是否可以删除它?例如,在我的表单中有一个菜单栏,在菜单栏中可以说有三个JmenuItems,每个JMenu.addSeparator()都有setVisible(false)。我想要做的是,如果其他用户登录,我想JMenuItem JMenuItem之一,因为该特定用户未授权使用该setVisible(false)。问题是当我JMenuItem JMenu.addSeparator() JMenuItem中的一个仍然存在时,由于两个JMenu.addSeparator()中间不存在{{1}},因此有点难以观察}。希望你能帮我解决这个问题。 提前致谢

2 个答案:

答案 0 :(得分:2)

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

你可以......

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

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;
    }
}

就我个人而言,我知道我更喜欢哪种方式,哪种方式会产生一致的结果......

答案 1 :(得分:0)

我遇到了必须从现有菜单中删除分隔符的情况。 (旧代码并没有被允许重构整个混乱。)

所以我使用了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;
            }
        }