Java使用循环项将ActionListener添加到JMenu

Java使用循环项将ActionListener添加到JMenu,java,listener,jmenu,Java,Listener,Jmenu,我有一个JMenu,我使用for循环向其中添加项目。项目显示正确,但是,我不知道如何向创建的对象添加任何类型的侦听器。我不需要在添加到JMenu的每个项目上都有一个侦听器,我只需要在JMenu上有一个侦听器,它返回我单击的对象的“名称”。。因此,如果JMenu包含一个项目“song”,当我通过JMenu单击该项目时,它应该返回String“song” 我当前的代码: JPopupMenu popup = new JPopupMenu(); remove = new JMe

我有一个
JMenu
,我使用
for
循环向其中添加项目。项目显示正确,但是,我不知道如何向创建的对象添加任何类型的侦听器。我不需要在添加到
JMenu
的每个项目上都有一个侦听器,我只需要在
JMenu
上有一个侦听器,它返回我单击的对象的“名称”。。因此,如果
JMenu
包含一个项目“song”,当我通过
JMenu
单击该项目时,它应该返回
String
“song”

我当前的代码:

JPopupMenu popup = new JPopupMenu();
            remove = new JMenuItem("delete");
            copyURL = new JMenuItem("copy url");
            add = new JMenuItem("add");
            edit = new JMenuItem("edit");
            addto = new JMenu("add to");
            popup.add(add);
            popup.add(edit);
            popup.add(addto);
            popup.add(copyURL);
            popup.add(remove);

            for(String x:model.getPlaylist()){
                addto.add(x);
            }


            if(! gui.display.isRowSelected(row)){
                gui.display.changeSelection(row, column, false, false);
            }
            popup.show(e.getComponent(),e.getX(),e.getY());
            remove.addActionListener(this);
            copyURL.addActionListener(this);
            add.addActionListener(this);
            edit.addActionListener(this);
            addto.addActionListener(this);
            }}

您可以创建自己的操作:

interface PlaylistListener {
    void addToPlaylist(String name);
}

class MainClass implements PlaylistListener {

    private void createJMenu() {
        addto = new JMenu("add to");
        //...
        for(String x: model.getPlaylist()){
            addto.add(new AddToPlaylistAction(x, this));
        }
        //...
    }

    @Override 
    void addToPlaylist(String name) {
        //...
    }
}

class AddToPlaylistAction extends AbstractAction {
    private String name;
    private PlaylistListener callback;

    public AddToPlaylistAction(String name, PlaylistListener callback) {
                    super(name);
        this.name = name;
        this.callback = callback;
    }

    void actionPerformed(ActionEvent e) {
        callback.addToPlaylist(name);
    }
}

谢谢我不知道你可以创造自己的听众,但似乎没有那么复杂!终于成功了。。但是我仍然想知道这100%是如何工作的。。嗯,谢谢你的帮助,我很感激:-)!