我正在尝试使用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) {
}
}
你正在掩盖你的变量......
public class entree implements MenuListener {
JFrame frame;
JMenu exit, teach;
entree() {
//...
JMenu teach = new JMenu("Teach");
JMenu exit = new JMenu("Exit");
您正在构造函数中创建局部变量,其名称与您稍后要尝试比较的实例字段的名称相同。这意味着当你尝试在exit
事件处理程序中比较它们时,teach
和null
实际上是menuSelected
。
一般来说,这真的不是JMenu
s如何工作,它们并不意味着是“可操作”的项目,它们应该是类似项目的容器(实现为JMenuItem
s)。
我会考虑使用JToolBar
或JPanel
与JButton
s,它被添加到NORTH
的BorderLayout
位置。从用户的角度来看,它将带来更常见和预期的用户体验 - 恕我直言