2017-12-19 30 views
0

을 선택했지만 종료 할 MenuListener가있는 JMenu를 만들려고했지만 프로그램이 종료되지 않았습니다.MenuListener가 작동하지 않습니다.

컴파일러에 오류 메시지가 표시되지 않습니다. 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) { 

    } 

    } 
+0

메뉴 자체가 아닌 MenuItems에 리스너가 추가되어서는 안됩니까? – Stultuske

+0

난 그냥 MenuItems에 대한 ActionListener 필요할 것이라고 생각하고 그것은 잘 작동 Wud, ActionListener 캔트 JMenus 그게 MenuListener를 사용하여 그게 구현 될 수 없습니다. – Spots

+0

하지 마십시오. 메뉴에 리스너를 추가하지 말고 메뉴 항목에 추가해야합니다. 메뉴가 원하는 "클릭 가능한"요소가 아니므로 MenuItem은 – Stultuske

답변

2

대답 당신은 당신의 변수를 미행하고

... 인스턴스가 당신이 필드로 같은 이름을 가진 생성자에서 로컬 변수를 만들

public class entree implements MenuListener { 

    JFrame frame; 
    JMenu exit, teach; 

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

나중에 비교하려고합니다. 즉, menuSelected 이벤트 처리기에서이 값을 비교해보고 비교할 때 및 teach은 실제로 null입니다.

제안 ...

는 일반적으로,이 정말하지 JMenu들, 그들은 "실행 가능한"항목이 될 운명이되지 않습니다, 그들은 같은 항목의 컨테이너 (수 의미 일을 가정하는 방법 JMenuItem s로 구현 됨).

내가 대신 BorderLayoutNORTH 위치에 추가됩니다 JButton들과 함께 JToolBar 또는 JPanel를 사용하거나 고려할 것입니다. 사용자의 관점에서보다 일반적인 사용자 경험을 기대할 수 있습니다 - IMHO