正如我在上一个问题中提到的那样,我在 Apple 的 JVM 中遇到了一些错误。我可以忍受第一个错误。但是第二个真的很烦人。如果我创建一个带有子菜单的 JMenu 并且我必须在运行时修改子菜单内容,我就是做不到。调试显示项目已添加到 Jmenu(子菜单)中。但是屏幕菜单栏中什么也没发生。这看起来像是真实 JMenu 对象的同步问题,它在 Mac OS X 菜单栏中的表示。
这是示例代码:
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
public class TestMenu extends JFrame{
public TestMenu() {
System.setProperty("apple.laf.useScreenMenuBar", "true");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JMenuBar mb = new JMenuBar();
mb.setName("menubar");
JMenu menu = new JMenu("menu");
JMenu submenu = new JMenu("submenu");
JMenuItem item = new JMenuItem("test item");
JMenuItem item2 = new JMenuItem("test item2");
JMenuItem subitem1 = new JMenuItem("sub item1");
JMenuItem subitem2 = new JMenuItem("sub item2");
menu.add(item);
mb.add(menu);
menu.add(submenu);
setJMenuBar(mb);
menu.add(item2);
setBounds(100, 100, 100, 100);
setVisible(true);
submenu.add(subitem1);
submenu.add(subitem2);
}
public static void main(String[] args) {
new TestMenu();
}
}
注意:我说的是 Apple JVM 的 1.6.0_15 版本。我必须牢记过时的版本,以确保我的软件不会因为用户计算机上的某些 JVM 中的错误而暴露任何数据,这些错误自从他或她购买了那个 MAC 后就没有更新。适用于 Windows 和 Mac OS X 的当前 Java 版本运行良好。问题本身:也许有人知道手动同步 JMenu 及其表示的方法?或者,也许您可以提出另一种解决方法?