我正在禁用一个
值得注意的是,我正在使用屏幕菜单栏,因为我使用的是OS X。以下是示例代码,可以展示这个问题:
JMenuBar
,在显示FileDialog
之前(因为当FileDialog
可见时,菜单项仍然处于活动状态),使用getJMenuBar().setEnabled(false)
,然后在FileDialog
关闭后调用getJMenuBar().setEnabled(true)
,但是启用后菜单项并没有变得活跃 - 如果我切换到另一个应用程序然后再切回我的应用程序,它们会变得活跃。我尝试了调用getJMenuBar().revalidate()
和/或getJMenuBar().repaint()
,但都没有效果。值得注意的是,我正在使用屏幕菜单栏,因为我使用的是OS X。以下是示例代码,可以展示这个问题:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MenuTest extends JFrame implements ActionListener {
private JMenuItem menuItemNew = new JMenuItem("New");
private JMenuItem menuItemOpen = new JMenuItem("Open");
private JMenuItem menuItemSave = new JMenuItem("Save");
private JMenu menuFile = new JMenu("File");
private JMenuBar menuBar = new JMenuBar();
public MenuTest() {
super("JMenu Test");
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuItemOpen.addActionListener(this);
menuFile.add(menuItemNew);
menuFile.add(menuItemOpen);
menuFile.add(menuItemSave);
menuBar.add(menuFile);
setJMenuBar(menuBar);
setVisible(true);
}
public void openFile() {
getJMenuBar().setEnabled(false);
FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD);
fd.setVisible(true);
getJMenuBar().setEnabled(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == menuItemOpen) {
openFile();
}
}
public static void main(String[] arguements) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
new MenuTest();
}
}
感谢您事先提供的评论/建议!
FileDialog
不是模态对话框吗? - MadProgrammer