今天查了很久,因为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");
}
});
}
}