网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.J2ME学习笔记(6)—连接MIDlet到文.
.使用ejbframe轻松编写EJB组件.
.想要开始为Java手机开发应用程序.
.关于BI与“数据仓库”在企业何时.
.我对类,方法 ,接口的认识.
.Java EE 5规范横空出世.
.关于连接池(1).
.italics 方法.
.java统计当前在线数.
.escape 方法.
.游戏开发小技巧—低级界面下的文.
.垃圾!.
.JavaTM Studio Creator 入门.
.Java理论与实践:哈希.
.Java与正则表达式(2年级2).
.教您如何成为 EJB 专家详解系列连.
.关于cachedRowSet的一篇文章(jav.
.谈谈J2SE中的序列化(一).
.Apache Geronimo 1.0 M3 Released.
.全面挖掘Java Excel API 使用方法.

鼠标右键的使用和启动弹出式菜单

发表日期:2008-1-5



  本文将通过实例介绍如何用鼠标右键启动弹出式菜单,以及如何执行菜单的
  指令。
  
  大家对弹出式菜单(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(400,300); 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.BUTTON3) { MyPopupMenu popup = new MyPopupMenu(this); popup.show((Component)panel, e.getX(), e.getY()); } else if (e.getSource() == display && e.getButton() == MouseEvent.BUTTON3) { 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.BUTTON3
  其中 getButton() 方法返回一个整数,
  MouseEvent.BUTTON1,
  MouseEvent.BUTTON2 或者
  MouseEvent.BUTTON3。
  MouseEvent.BUTTON1 代表左键,
  MouseEvent.BUTTON3 代表右键。假如你的鼠标有三个
  键的话,MouseEvent.BUTTON2 代表中间的键。
  
  
  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中的显示。
  
  从以上的例子我们看到利用鼠标右键来启动弹出式菜单是非常轻易的。
上一篇:一个奇怪的问题 人气:450
下一篇:使用布局管理器 呈现生动的JAVA程序界面 人气:599
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐