我正在禁用JMenuBar
在显示之前FileDialog
(因为当FileDialog
可见)使用getJMenuBar().setEnabled(false)
然后打电话getJMenuBar().setEnabled(true)
之后FileDialog
关闭,但菜单项在启用后不会变为活动状态 - 如果我更改为另一个应用程序并返回到我的应用程序,它们就会变为活动状态。我试过打电话getJMenuBar().revalidate()
and/or 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();
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)