MenuListener无法正常工作

问题描述 投票:0回答:1

我正在尝试使用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) {

    }

    }
java listener jmenu
1个回答
2
投票

Answer to the question

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

public class entree implements MenuListener {

    JFrame frame;
    JMenu exit, teach;

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

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

Suggestions...

一般来说,这真的不是JMenus如何工作,它们并不意味着是“可操作”的项目,它们应该是类似项目的容器(实现为JMenuItems)。

我会考虑使用JToolBarJPanelJButtons,它被添加到NORTHBorderLayout位置。从用户的角度来看,它将带来更常见和预期的用户体验 - 恕我直言

© www.soinside.com 2019 - 2024. All rights reserved.