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

时间:2014-02-13 21:25:13

标签: java listener jmenu

我有一个JMenu,我使用for循环向其添加项目。这些项目显示正确,但是,我不知道如何向创建的对象添加任何类型的Listener。我不需要在添加到JMenu的每个项目上都有一个监听器,我只需要JMenu上的监听器,它将返回" name"我点击的对象..所以如果JMenu包含一个项目"歌曲",它应该返回String"歌曲",当我点击该项目时通过JMenu

我目前的代码:

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);
            }}

1 个答案:

答案 0 :(得分:1)

您可以创建自己的操作:

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);
    }
}