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