编程语言
首页 > 编程语言> > Apple的JAVA:JMenu的子菜单没有更新

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