【问题标题】:JMenuItem updating without restarting the client无需重启客户端即可更新 JMenuItem
【发布时间】:2013-10-08 00:58:35
【问题描述】:

此代码将用户最喜欢的歌曲从 ArrayMap 添加到 JmenuItem

        public void actionPerformed(ActionEvent evt) {
    String cmd = evt.getActionCommand();
    if (cmd != null) {
        if (cmd.equalsIgnoreCase("Favorite song")) {
            Music.f.add(Music.s);
            System.out.println(Music.s + " added to favorites");
            System.out.println(Music.f + " current list");

        }
    }
}
    public void initUI() {
    try {
    //...

        JMenu fileMenu = new JMenu("Music And Sound Options");
        JMenu favorites = new JMenu("Favorite songs");

        for (String name : Music.f) {
            JMenuItem menuItem = new JMenuItem(name);
            menuItem.addActionListener(this);
            favorites.add(menuItem);
        }


        JMenuBar menuBar = new JMenuBar();
        JMenuBar jmenubar = new JMenuBar();

        frame.add(jmenubar);
        menuBar.add(favorites);
        frame.getContentPane().add(menuBar, BorderLayout.NORTH);
        frame.pack();
        frame.setVisible(true); // can see the client

        init();
        //...
    } catch (Exception e) { e.printStackTrace(); }
}

我希望在添加歌曲后更新歌曲列表,而不必重新启动客户端以查看更多歌曲

【问题讨论】:

    标签: java swing jmenu jmenuitem


    【解决方案1】:
    //JMenu favorites = new JMenu("Favorite songs");    
    favorites = new JMenu("Favorite songs");
    

    收藏夹菜单需要定义为类变量。然后,当您执行此操作时,您的 ActionListener 现在可以引用菜单并向菜单添加新菜单项。

    if (cmd.equalsIgnoreCase("Favorite song")) {
        Music.f.add(Music.s);
        System.out.println(Music.s + " added to favorites");
        System.out.println(Music.f + " current list");
        JMenuItem item = new JMenItem(...);
        favorites.add( item );
    

    【讨论】:

      【解决方案2】:

      如果您将JMenuBar 的引用存储为类字段,则可以调用menuBar.removeAll() 并在需要时使用新菜单项重新填充它(但请确保在执行此操作时在 Swing 线程上执行此操作,使用SwingUtilities.invokeLater() 或您选择的 Swing 方法)。

      【讨论】:

      • 不需要使用invokeLater,因为来自监听器的代码是在EDT上执行的。
      • 对;我错过了 OP 希望这发生在侦听器方法中。这就是我一次做太多事情的结果......
      猜你喜欢
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多