将ActionListener添加到JMenuItem Netbeans?

时间:2014-01-12 14:24:16

标签: java swing netbeans actionlistener jmenuitem

我在Netbeans中有一个GUI ..我唯一的问题是向我的JMenuItems添加事件。我正在加载一个String[]作为我的menulistJMenuItem添加新.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之前没有创建项目。

1 个答案:

答案 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