知识大全 鼠标右键的使用和启动弹出式菜单
Posted 菜单
篇首语:我相信:一切事物的价值必将重新得到评估。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 鼠标右键的使用和启动弹出式菜单相关的知识,希望对你有一定的参考价值。
本文将通过实例介绍如何用鼠标右键启动弹出式菜单 以及如何执行菜单的 指令 大家对弹出式菜单(Popup Menu)的使用相信都非常熟悉了 我们将通过如下的例子解释如何在Java中使用右键和弹出式菜单 主程序是一个Java Application 叫UseRightButton 它上面是一个JPanel 在此JPanel上有一个JLabel 用以显示弹出式菜单 中指令执行的结果 我们要求当用鼠标右键点击JLabel或者JPanel上时弹出一个菜单 菜单 中有 Say Hello Say Hello again Say Byebye 三个选项 选择其中的任何一个指令 将在 JLabel中显示对应的String 在本例中有两个Class 一个是UseRightButton (Java应用程序) 另一个是MyPopupMenu (弹出式窗口) UseRightButton的源程序如下 import javax swing *;import java awt event MouseEvent;import java awt event MouseListener;import java awt *;public class UseRightButton extends JFrame implements MouseListener JPanel panel; JLabel display; public UseRightButton() setTitle( Use right button and popup menu ); setSize( ); panel = new JPanel(); display = new JLabel( ); display setOpaque(true); display setBackground(Color yellow); panel add(display); panel addMouseListener(this); display addMouseListener(this); getContentPane() setLayout(new BorderLayout()); getContentPane() add(panel BorderLayout CENTER); public static void main(String[] args) UseRightButton rb = new UseRightButton(); rb setVisible(true); public void mousePressed(MouseEvent e) if (e getSource() == panel && e getButton() == MouseEvent BUTTON ) MyPopupMenu popup = new MyPopupMenu(this); popup show((Component)panel e getX() e getY()); else if (e getSource() == display && e getButton() == MouseEvent BUTTON ) MyPopupMenu popup = new MyPopupMenu(this); popup show((Component)display e getX() e getY()); public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public void mouseReleased(MouseEvent e) 从上面的程序我们看到 和使用鼠标左键一样 我们是用 来控制鼠标事件 我们所要做的是限制 MouseEvent 响应鼠标右键的点击 不响应鼠标左键的点击 这可由下面的方法来实现 e getButton() == MouseEvent BUTTON 其中 getButton() 方法返回一个整数 MouseEvent BUTTON MouseEvent BUTTON 或者 MouseEvent BUTTON MouseEvent BUTTON 代表左键 MouseEvent BUTTON 代表右键 如果你的鼠标有三个 键的话 MouseEvent BUTTON 代表中间的键 JLabel (display)仅仅占据 JPanel 的一小部分(我们用黄色背景显示它的大小和位置) 而我们要求当右键电击JPanel 包括JLabel 都要弹出菜单 所以我们把JPanel和 JLabel都加上MouseListener 弹出式菜单Class的源程序如下 import javax swing *;import java awt event ActionListener;import java awt event ActionEvent;public class MyPopupMenu extends JPopupMenu implements ActionListener JMenuItem sayHello sayHelloAgain sayByeBye; UseRightButton useRightButton; public MyPopupMenu(UseRightButton urb) useRightButton = urb; sayHello = new JMenuItem( Say Hello ); sayHelloAgain = new JMenuItem( Say Hello again ); sayByeBye = new JMenuItem( Say Bye Bye ); sayHello addActionListener(this); sayHelloAgain addActionListener(this); sayByeBye addActionListener(this); add(sayHello); this addSeparator(); add(sayHelloAgain); add(sayByeBye); public void actionPerformed(ActionEvent e) if (e getSource() == sayHello) System out println(); useRightButton display setText( Hello! ); else if (e getSource() == sayHelloAgain) System out println( Hello! Hello! ); useRightButton display setText( Hello! Hello! ); else if (e getSource() == sayByeBye) System out println( Bye Bye! ); useRightButton display setText( Bye Bye! ); 这个程序很简单 是一个标准的JPopupMenu 唯一需要指出的是在 constructor中我们引入该弹出式菜单的 base 类 UseRightButton 这是因为 我们要返回弹出式窗口中指令执行的结果到原来的GUI界面上 很显然我们 不能用 useRightButton = new UseRightButton() 因为两个class不能互相引用 对于一个复杂的应用程序 我们应该使用Model View Controller架构来作 即 用弹出式菜单当controller 用JLabel (display)作为View 再写一个model类来接 收来自弹出式菜单的String 并自动更新JLabel中的显示 从以上的例子我们看到利用鼠标右键来启动弹出式菜单是非常容易的 cha138/Article/program/Java/JSP/201311/19180相关参考