我在Netbeans中有一个GUI ..我唯一的问题是向我的JMenuItems
添加事件。我正在加载一个String[]
作为我的menulist
为JMenuItem
添加新.length
private void addToGamePanel(){
String[] gameNames = con.getGameNames();
for (int i = 0; i < gameNames.length; i++) {
jMenu2.add(new JMenuItem(gameNames[i]));
}
}
我的问题是如何为JMenuItem
添加动作事件。我无法在GUI窗口中设置事件,因为在加载gameNames
之前没有创建项目。
答案 0 :(得分:0)
您必须将每个菜单项都传递给动作侦听器。一种可能性是让您的类实现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甚至更好的Action,请查看:How to use Actions