JMenuBar被禁用后不启用



在显示FileDialog之前,我禁用了JMenuBar(因为菜单项在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();
    }
}

提前感谢您的评论/建议!

对于我来说,我可以通过启用/禁用每个JMenuItem而不是菜单栏或菜单本身来解决这个问题。

我也在EDT上做了所有的事情,以防万一这是问题,但它没有帮助。

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;
public class MenuTest 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();
    JFrame frame;
    public MenuTest() {
    }
    public void buildGui(){
        frame = new JFrame("JMenu Test");
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        menuItemOpen.addActionListener(this);
        menuFile.add(menuItemNew);
        menuFile.add(menuItemOpen);
        menuFile.add(menuItemSave);
        menuBar.add(menuFile);
        frame.setJMenuBar(menuBar);
        frame.setVisible(true);
    }
    public void openFile() {
        menuItemNew.setEnabled(false);
        menuItemOpen.setEnabled(false);
        menuItemSave.setEnabled(false);
        FileDialog fd = new FileDialog(frame, "Choose a file", FileDialog.LOAD);
        fd.setVisible(true);
        menuItemNew.setEnabled(true);
        menuItemOpen.setEnabled(true);
        menuItemSave.setEnabled(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
            openFile();
        }
    public static void main(String[] arguements) {
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        EventQueue.invokeLater(()->{
            new MenuTest().buildGui();
                });
    }
}

相关内容

  • 没有找到相关文章