Apple的JAVA:JMenu的子菜单没有更新
作者:互联网
正如我在上一个问题中所提到的,我在Apple的JVM中遇到了一些错误.我可以忍受第一个bug.但第二个真的很烦人.如果我创建一个带有子菜单的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而没有更新.当前版本的Java for Windows和Mac OS X工作正常.
问题本身:也许有人知道手动同步JMenu及其代表的方法?或者您可以提出另一种解决方法?
解决方法:
我找到了解决方案,并没有那么难……
.................................
menu.add(item2);
setBounds(100, 100, 100, 100);
setVisible(true);
submenu.add(subitem1);
submenu.add(subitem2);
SwingUtilities.updateComponentTreeUI(mb); //This line updates menu representation
}
................................
标签:java,macos,jmenu 来源: https://codeday.me/bug/20190626/1290291.html