您必須將每個菜單項傳遞給動作偵聽器。一種可能是讓您的班級實施ActionListener
界面並定義方法actionPerformed
。
class YourClass implements ActionListener {
[...]
private void addToGamePanel(){
String[] gameNames = con.getGameNames();
for (int i = 0; i < gameNames.length; i++) {
JMenuItem item = new JMenuItem(gameNames[i])
item.addActionListener(this);
jMenu2.add(item);
}
}
public void actionPerformed(ActionEvent e) {
JMenuItem menuItem = (JMenuItem)(e.getSource());
// do something with your menu item
String text = menuItem.getText();
}
}
在這種情況下,您的類的實例也充當ActionListener。對於簡單的事情,你也可以使用匿名類
private void addToGamePanel(){
String[] gameNames = con.getGameNames();
for (int i = 0; i < gameNames.length; i++) {
JMenuItem item = new JMenuItem(gameNames[i])
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JMenuItem menuItem = (JMenuItem) e.getSource();
// do something with your menu item
String text = menuItem.getText();
}
});
jMenu2.add(item);
}
}
如果你有一些更高級的需求,你可以考慮定義一個單獨的ActionListener甚至更好的行動,來看看:How to use Actions
什麼事件聽衆你想註冊嗎? – Behe
不知道我得到你......但我只是想知道如何添加事件/ actionPerformed到JMenuItems ..一個朋友說了一些關於一個聽衆,但我真的不知道如何.. – HOervald
你正在爲每個添加一個菜單項item [] gameNames。你是否也有一組事件監聽器?或者他們都應該使用相同的聽衆? – Behe