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%是如何工作的。。嗯,谢谢你的帮助,我很感激:-)!