Java使用Swing框架实现JMenu的点击事件响应(低配版)

      今天查了很久,因为Jmenu不像JLabel有直接的MouseListener。最后我用了一个笨方法。如果大家有更好的方法欢迎交流~

实现功能:鼠标移至JMenu的按钮,按钮选中事件触发。

实际上javax.swing.event.MenuListener,有三个抽象函数:

函数名称 用途

public void menuSelected(MenuEvent e)

当此菜单项被选中,触发这个函数。
public void menuDeselected(MenuEvent e) 当此菜单项从被选中的状态转换到未选中的状态(鼠标发生移动,移开了此区域),触发这个函数。
public void menuCanceled(MenuEvent e) 当菜单项被取消,触发该事件。一般不会调用,视情况而定吧。

效果图:

我通过分别在menuSelected()和menuDeselected()中打印值,来确定菜单项的选中。

我依次从左到右移动鼠标。

核心代码:

 menu6.addMenuListener(new MenuListener() {

           public void menuSelected(MenuEvent e) {

             MovieView d = new MovieView();
           }
           public void menuDeselected(MenuEvent e) {
             System.out.println("menu6");
           }
           public void menuCanceled(MenuEvent e) {
             System.out.println("menu6");
           }
         });

全部代码:

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

public class HomePage extends JFrame{
   JMenuBar menubar;
    JMenu menu1,menu2,menu3;

    public HomePage(){} 
    public HomePage(String s,int x,int y,int w,int h) {
       init(s);
    // 设置窗体位置在屏幕中央
       setLocationRelativeTo(null);
       setLocation(x,y);
       setSize(w,h);
       setVisible(true);
       setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    }
    void init(String s){
       setTitle(s);             //设置窗口的标题   
       menubar=new JMenuBar(); 
       menu1=new JMenu("电影资讯");
       menu2=new JMenu("订票详情");
       menu3=new JMenu("退改订票");
       
       menubar.add(menu1);       
       menubar.add(menu2);
       menubar.add(menu3);
       setJMenuBar(menubar);
       
       menu1.addMenuListener(new MenuListener() {

    	      public void menuSelected(MenuEvent e) {
    	        System.out.println("menu1 选中");
    	        MovieView d = new MovieView();
    	      }
    	      public void menuDeselected(MenuEvent e) {
    	        System.out.println("menu1未选中");
    	      }
    	      public void menuCanceled(MenuEvent e) {
    	        System.out.println("menu1");
    	      }
    	    });
       menu2.addMenuListener(new MenuListener() {

 	      public void menuSelected(MenuEvent e) {
 	        System.out.println("menu2选中");

 	      }
 	      public void menuDeselected(MenuEvent e) {
 	        System.out.println("menu2未选中");
 	      }
 	      public void menuCanceled(MenuEvent e) {
 	        System.out.println("menu2");
 	      }
 	    });
       menu3.addMenuListener(new MenuListener() {

 	      public void menuSelected(MenuEvent e) {
 	        System.out.println("menu3选中");

 	      }
 	      public void menuDeselected(MenuEvent e) {
 	        System.out.println("menu3未选中");
 	      }
 	      public void menuCanceled(MenuEvent e) {
 	        System.out.println("menu3");
 	      }
 	    });

    }

}
发布了15 篇原创文章 · 获赞 44 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_42312574/article/details/91457971