gpt4 book ai didi

java - JMenuBar禁用后不启用

转载 作者:行者123 更新时间:2023-12-02 07:34:17 25 4
gpt4 key购买 nike

我在显示 FileDialog 之前禁用 JMenuBar (因为当 FileDialog 可见时菜单项仍然处于 Activity 状态),使用 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();
});
}

}

关于java - JMenuBar禁用后不启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com