Java 将侦听器添加到JFrame中的JMenuItem

Java 将侦听器添加到JFrame中的JMenuItem,java,swing,listener,jmenu,jmenuitem,Java,Swing,Listener,Jmenu,Jmenuitem,我有一个JFrame,里面有一个JMenuBar和JMenu。在每个JMenu中都有几个JMenuItem。我只想向这些JMenuItem添加一个侦听器,所以当我单击其中一个时,会发生一些事情。 代码是: public class FinestraOrario extends JFrame { private int semester; private DBConnection connection = new DBConnection(); private Container c =

我有一个JFrame,里面有一个JMenuBar和JMenu。在每个JMenu中都有几个JMenuItem。我只想向这些JMenuItem添加一个侦听器,所以当我单击其中一个时,会发生一些事情。 代码是:

public class FinestraOrario extends JFrame
{   

private int semester;
private DBConnection connection = new DBConnection();
private Container c = this.getContentPane();
private JMenu subjMnu = new JMenu("Insegnamento");
private JMenu classMnu = new JMenu("Aula");
private JMenu profMnu = new JMenu("Docente");

    public FinestraOrario(int i)
    {
        semester = i;

        //Define menus
        JMenuBar bar = new JMenuBar();
        JMenu choice = new JMenu("Visualizza Orario per..");

        //Define frame features
        this.setSize(1150,650);
        this.setLocationRelativeTo(null);
        this.setJMenuBar(bar);

        //Add JMenu
        bar.add(choice);
        choice.add(classMnu);
        choice.add(subjMnu);
        choice.add(profMnu);

        //populate Menus
        populateMenu();


    private void populateMenu ()
    {

        //data from database which populate the JMenu as JmenuItem
        ArrayList<String[]> subjctesAndClasses= connection.getSemesterData(semester, "");

        ArrayList<String[]> teachers = connection.getSemesterData(semester, "keep theachers");


        Iterator<String[]> i=subjctesAndClasses.iterator(); 
        Iterator<String[]> j=teachers.iterator(); 

        Set<String> set1  = new HashSet<String>();
        Set<String> set2  = new HashSet<String>();
        Set<String> set3  = new HashSet<String>();


                while(i.hasNext())      //check values
                {
                    String[] value=i.next();    
                    String subject = value[1];  //value contains at subjects at index 1 and classes at index 2
                    String class=value[2];
                    set1.add(subject);          //erase duplicate
                    set2.add(class);                    
                }

        //getting value without duplicates
        for (String s: set1)
        {   
            JMenuItem item = new JMenuItem(s);
            subjMnu.add(item);
        }

        for (String s: set2)
        {
            JMenuItem item = new JMenuItem(s);
            classMnu.add(item);

        }

                while(j.hasNext())          //idem for teacher
                {
                    String[] value=j.next();            
                    String teacher = value[0];
                    set3.add(teacher);
                }

        for (String s: set3)
        {profMnu.add(new JMenuItem(s));}

    }
}
公共类FinestraOrario扩展JFrame
{   
私人学期;
私有数据库连接=新数据库连接();
私有容器c=this.getContentPane();
私有JMenu subjectmnu=新JMenu(“插入”);
私有JMenu类MNU=新JMenu(“Aula”);
私有JMenu profMnu=新JMenu(“文档”);
公共设施(国际一)
{
学期=i;
//定义菜单
JMenuBar=新的JMenuBar();
JMenu选项=新JMenu(“VisualizaOrario per..”;
//定义框架特征
此.setSize(1150650);
此.setLocationRelativeTo(空);
这个.setJMenuBar(bar);
//添加JMenu
添加(选择);
选择。添加(classMnu);
选择。添加(subjectmnu);
选择。添加(profMnu);
//填充菜单
populateMenu();
私有void populateMenu()
{
//来自数据库的数据,这些数据作为JmenuItem填充JMenu
ArrayList subjectsAndClasses=connection.getSemesterData(学期“”);
ArrayList teachers=connection.getSemesterData(学期,“保留教师”);
迭代器i=subjectsAndClasses.Iterator();
迭代器j=teachers.Iterator();
Set set1=新的HashSet();
Set set2=新的HashSet();
Set set3=新的HashSet();
while(i.hasNext())//检查值
{
字符串[]值=i.next();
字符串subject=value[1];//value包含索引1中的主题和索引2中的类
字符串类=值[2];
set1.add(subject);//删除重复项
set2.add(类);
}
//获取没有重复项的值
for(字符串s:set1)
{   
JMenuItem=新的JMenuItem;
主体增加(项目);
}
用于(字符串s:set2)
{
JMenuItem=新的JMenuItem;
类别编号添加(项目);
}
while(j.hasNext())//我是老师
{
字符串[]值=j.next();
字符串教师=值[0];
set3.add(教师);
}
用于(字符串s:set3)
{profMnu.add(新项目);}
}
}

如何向每个JMenuItem添加侦听器?

JMenuItem item=new

 item.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {

        }
    });      

您调用item.addActionListener()?好的,谢谢。但它根本不起作用:我在
FinestraOrario
中有一个方法,如果我从
public void actionPerformed(..)调用它
它没有回答。怎么可能?有什么问题吗?您可以在单击菜单项时打印一些字符串进行测试。是的,它可以工作,但在我的项目中,我必须在单击该项时调用一个方法。而该方法未被调用。。