禁用后JMenuBar不启用

时间:2015-08-19 03:18:55

标签: java swing jmenubar

我在使用JMenuBar显示FileDialog(因为FileDialog可见时菜单项仍处于活动状态)然后调用{{{}之前禁用getJMenuBar().setEnabled(false) 1 {}在getJMenuBar().setEnabled(true)关闭后,但菜单项在启用后不会变为活动状态 - 如果我更改为另一个应用程序并返回到我的菜单项,它们将会激活。我试过调用FileDialog和/或getJMenuBar().revalidate()无济于事。

值得注意的是,我正在使用屏幕菜单栏,因为我在OS X上。显示问题的示例代码:

getJMenuBar().repaint()

提前感谢您提出意见/建议!

1 个答案:

答案 0 :(得分:0)

对我来说,我可以通过启用/停用每个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();
                });
    }

}