我有一个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);
}}
答案 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);
}
}