知识大全 鼠标右键的使用和启动弹出式菜单

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

相关参考