java创建菜单点击后没反应

package 菜单练习;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;public class Practice1 extends JFrame implements ActionListener{ public Practice1() { JMenuBar jmb=new JMenuBar(); JMenu jm=new JMenu("退出"); jm.addActionListener(this); jm.setActionCommand("退出"); jmb.add(jm); this.setJMenuBar(jmb); this.setBackground(getBackground()); this.setSize(200, 200); this.setVisible(true); } public static void main(String[] args) { new Practice1(); } @Override public void actionPerformed(ActionEvent e) { switch (e.getActionCommand()) { case"退出": System.exit(0); break; default: break; } }}
点击退出退出不了

JMenuItem 菜单项 可以使用addActionListener

JMenu 菜单 需要使用的是 addMenuListener

我写了个完整的参考代码. 图例如下

3个画蓝圆圈的地方, 都可以点击后退出

参考代码如下

import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Practice1 extends JFrame implements ActionListener {
public Practice1() {
JMenuBar jmb = new JMenuBar(); //语句结束需要有分号
JMenu jm = new JMenu("退出");
JMenu jm2 = new JMenu("功能");// 创建第二个菜单
JMenuItem jmi = new JMenuItem("退出");// 创建一个菜单项
jm2.add(jmi);
jmi.addActionListener(this);// 该菜单项添事件响应

jmb.add(jm);
jmb.add(jm2);
this.setJMenuBar(jmb);
this.setSize(200, 200);
this.setLocationRelativeTo(null);// 居中
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 当点击右上角的X按钮时,结束程序

// 如果是JMenuItem 那么需要添加ActionListener
// 注意如果是JMenu,那么需要添加是MenuListener
jm.addMenuListener(new MenuListener() {

@Override
public void menuSelected(MenuEvent e) {//当菜单被选中
System.exit(0);
}

@Override
public void menuDeselected(MenuEvent e) {
}

@Override
public void menuCanceled(MenuEvent e) {
}
});
}

public static void main(String[] args) {
new Practice1();
}


@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case "退出":
System.exit(0);
break;
default:
break;
}
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-20
JMenu的点击事件不是addActionListener而是addMenuListener追问

addActionListener不可以吗,能不能帮我改一下代码?

追答

你把所有的actionListener对应改成menuListener即可