Java 将侦听器添加到JFrame中的JMenuItem
我有一个JFrame,里面有一个JMenuBar和JMenu。在每个JMenu中都有几个JMenuItem。我只想向这些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 =
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(..)调用它
它没有回答。怎么可能?有什么问题吗?您可以在单击菜单项时打印一些字符串进行测试。是的,它可以工作,但在我的项目中,我必须在单击该项时调用一个方法。而该方法未被调用。。