不要急,听我的.
直接的new JMenuItem("item1");是无法响应事件的.
如果你希望POPUPMENU中的项响应事件,你需要做几个COMPONENT,然后将这些作为POPUPMENU的ADD参数,如下例:
private class RefreshAction extends AbstractAction{
public RefreshAction(){
super("刷新所选类别");
}
public void actionPerformed(ActionEvent e){
showStatus("正在刷新所选类别... ...");
reloadCategoryNode(selectedCategory);
showStatus("所选类别已刷新");
}
}
bearerbox_menu.add(RefreshAction);
这样就可以了,试试
直接的new JMenuItem("item1");是无法响应事件的.
如果你希望POPUPMENU中的项响应事件,你需要做几个COMPONENT,然后将这些作为POPUPMENU的ADD参数,如下例:
private class RefreshAction extends AbstractAction{
public RefreshAction(){
super("刷新所选类别");
}
public void actionPerformed(ActionEvent e){
showStatus("正在刷新所选类别... ...");
reloadCategoryNode(selectedCategory);
showStatus("所选类别已刷新");
}
}
bearerbox_menu.add(RefreshAction);
这样就可以了,试试
public void init(){
bearerbox_menu = new JPopupMenu();
bearerbox_menu.add(new LinkAction(this,bbItem1,wdp_url));
bearerbox_menu.add(new LinkAction(this,bbItem2,wdpLoad_url));
.......
}class LinkAction extends AbstractAction{
JApplet myApplet;
String link;
public LinkAction(JApplet pt,String label,String urlStr){
super(label);
myApplet = pt;
link = urlStr;
System.out.println("####new LinkAction#############");
}
public void actionPerformed(ActionEvent e){
...
try {
URL itemLink = new URL(link);
myApplet.getAppletContext().showDocument(itemLink);
System.out.println("this itemLink to : " + link);
} catch (MalformedURLException urlException) {
urlException.printStackTrace();
}
}
}可是为什么PopoupMenu增添MenuItem的机制这么奇怪呢??
即为何不用 public JMenuItem add(JMenuItem menuItem)
而用 public JMenuItem add(Action a) 机制**前者就是我原来的作法(我原先的提问中写漏了:
PopupMenu bearerbox_menu = new PopupMenu();
bearerbox_menu.add(bb_MenuItem[0]);
bb_MenuItem[0].addActionListener(this);
...),但是菜单项的Listener死活就是添加不上去,而用**的机制就可以乐,好诡异阿,salute大虾可否解释一下?//bow另外你说的ADD参数又是什么意思阿?