我试图在禁用其所有子项目时禁用JMenu。 我有一个菜单“添加新的”,在这个菜单中有两个菜单项:“文件”和“目录”。当其所有项目被禁用时禁用JMenu
菜单项绑定到特定的动作,其状态改变,所以菜单项也改变它们的状态。
我想要实现的是当“文件”和“目录”操作以及项目被禁用时,“添加新的”菜单被禁用。
我试图覆盖isSelected()方法od JMenu,它部分工作 - 它不显示项目。但是,菜单仍然被绘制为活动(黑色字体而不是灰色)。
有关如何实现此目的的任何想法?
下面是复制的情况代码示例:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
JPopupMenu popup = new JPopupMenu();
final Action actionBeep = new DefaultEditorKit.BeepAction();
final Action actionPaste = new DefaultEditorKit.PasteAction();
JMenu menu = new JMenu("Add");
menu.add(new JMenuItem(actionBeep));
menu.add(new JMenuItem(actionPaste));
popup.add(menu);
JTable table = new JTable(3, 3);
table.setComponentPopupMenu(popup);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if(e.getClickCount() == 2) {
actionBeep.setEnabled(!actionBeep.isEnabled());
actionPaste.setEnabled(!actionPaste.isEnabled());
}
}
});
frame.add(table);
frame.pack();
frame.setVisible(true);
}
});
}
JMenu有一个setEnabled()函数。为什么不使用它? –
我的设计意味着一些额外的代码,但这当然是一个可行的解决方案。 – Shocked