MenuListener无法正常工作

时间:2017-12-19 08:38:18

标签: java listener jmenu

我正在尝试创建一个带有MenuListener的JMenu,以便在选中时退出,但程序没有退出。

编译器未显示任何错误消息。不确定e.getsource()是否无法正常工作或是否是其他内容。

提前谢谢。

 import java.awt.*;


import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

public class entree implements MenuListener{
    JFrame frame;
    JMenu exit,teach;
    entree(){
        Font font=new Font("SansSerif",Font.BOLD,22);
        JFrame frame=new JFrame();
        ImageIcon icon=new ImageIcon("D:\\Capture_aurora.png");
        JLabel  bg=new JLabel(icon);
        JMenuBar mb=new JMenuBar();

        JMenu teach=new JMenu("Teach");
        JMenu exit =new JMenu("Exit");
        teach.setFont(font);exit.setFont(font);exit.addMenuListener(this);teach.addMenuListener(this);

        mb.add(teach);mb.add(Box.createHorizontalGlue());mb.add(exit);


        JButton button1=new JButton("Start");
        button1.setFont(font);
        button1.setBounds(870,820,150,45);

        frame.setJMenuBar(mb);
        frame.add(button1);
        frame.add(bg,BorderLayout.CENTER);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setUndecorated(true);


        frame.setVisible(true);

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

    public void menuSelected(MenuEvent e) {
        if(e.getSource()==exit) {
         System.exit(0);frame.dispose();}// Code supposed to work here, but the program won't exit
        if(e.getSource()==teach) {} 
        }

    public void menuDeselected(MenuEvent e) {

    }
    public void menuCanceled(MenuEvent e) {

    }

    }

1 个答案:

答案 0 :(得分:2)

回答问题

你正在掩盖你的变量......

public class entree implements MenuListener {

    JFrame frame;
    JMenu exit, teach;

    entree() {
        //...
        JMenu teach = new JMenu("Teach");
        JMenu exit = new JMenu("Exit");

您在构造函数中创建局部变量,其名称与您稍后要比较的实例字段的名称相同。这意味着,当您尝试在exit事件处理程序中对它们进行比较时,teachnull实际上是menuSelected

建议...

一般来说,这并不是JMenu假设工作的方式,它们并不是“可操作”的项目,它们应该是类似项目的容器(实现为{{1 }}为s)。

我会考虑使用JMenuItemJToolBarJPanel一起添加到JButton的{​​{1}}位置。从用户的角度来看,它将带来更常见和预期的用户体验 - 恕我直言