java - JMenuItem 更新无需重新启动客户端

标签 java swing jmenu jmenuitem

此代码将用户最喜欢的歌曲从 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(); }
}

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

最佳答案

//JMenu favorites = new JMenu("Favorite songs");    
favorites = new JMenu("Favorite songs");

Collection 夹菜单需要定义为类变量。然后,当您执行此操作时,您的 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 );

关于java - JMenuItem 更新无需重新启动客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237350/

相关文章:

java - 通过 DynamoDBMapper 在条件写入中使用 NOT_CONTAINS

java - Spring源码超时导致Tomcat启动失败

java - 编辑场景生成器生成模型

java - swing.Timer不停止

java - 如何动态构建 JMenu?

java - 无法模拟Spring Data Jpa的void方法

java - 将 xml 转换为可视化 Swing 树的库?

java - 如何在 Java Swing 中对齐组件?

java - 如何在java中禁用某些用户菜单中的功能?

Java JMenu 和 Jtextfield 只处理数字而不处理字符串