【发布时间】:2012-12-07 00:12:41
【问题描述】:
我有一个带有 JMenuBar 的 JFrame,我正在 Mac 系统上进行开发和测试。在这个 JFrame 上,我已将其中一个 JMenu 编程为禁用。但是,当我将焦点从 Java 应用程序转移到计算机上的某个其他程序,然后又回到这个 JFrame 时,奇怪的事情正在发生。我观察到所有菜单都被禁用。我还观察到所有菜单都已启用。谁能告诉我这里发生了什么?
这是一段将重现错误的代码(至少在我的机器上是这样):
public class MenuProblemExample {
public static void main(String[] args) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
JFrame frame = new JFrame();
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("open"));
menuBar.add(fileMenu);
JMenu editMenu = new JMenu("Edit");
editMenu.add(new JMenuItem("select all"));
menuBar.add(fileMenu);
menuBar.add(editMenu);
frame.setJMenuBar(menuBar);
fileMenu.setEnabled(false);
frame.setVisible(true);
}
}
当我运行它时,在将焦点切换到另一个窗口然后再返回的操作下,启用的属性不稳定。
【问题讨论】:
-
你能发布一个SSCCE或截图吗?
-
对我来说一切正常。我不是 Mac OS 用户,但我敢打赌这行代码有问题:
System.setProperty("apple.laf.useScreenMenuBar", "true");你为什么要设置该属性? -
它使框架的菜单栏以 Mac OSX 操作系统中本地应用程序的方式显示在屏幕顶部。
-
而
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());代表什么? :) -
我不明白你的问题。该代码不在我的示例中。