Я отключение JMenuBar
перед отображением FileDialog
(как пункты меню все еще активны, когда FileDialog
видна) с помощью getJMenuBar().setEnabled(false)
и последующего вызова getJMenuBar().setEnabled(true)
после того, как FileDialog
закрытий, но пункты меню сделать не становятся активными после включения - они будут, если я перейду на другое приложение и вернусь к моему. Я пробовал звонить getJMenuBar().revalidate()
и/или getJMenuBar().repaint()
безрезультатно.JMenuBar не позволяет отключенный
Следует отметить, что я использую меню панели экрана, как я на 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
Это .. он отключает окна позади него, но не панель меню. Он также отключит панель меню, если я не установил системное свойство, чтобы оно было как панель меню экрана для OS X. – Nikki
А как вы можете указать, что вы на OSX в своем вопросе;) – MadProgrammer