JPopupMenu类简介

 

转     载 http://hi.baidu.com/hpc_pig/blog/item/4b3c38acdd3d610e4a36d6c6.html/cmtid/ecd09e2a85097ff7e6cd4080

 

 

 

 

 

JPopupMenu类扩展了javax.swing.JComponent,是Swing提供的一种菜单。与其他形式菜单不同的是,JPopupMenu并不固定在菜单栏中,而是能够自由浮动。JPopupMenu具有很好的环境相关(context-sensitive)特性,每一个JPopupMenu都与相应的控件相关联,该控件被称做调用者(invoker)。

创建JPopupMenu非常简单,下面代码创建了一个JPopupMenu:

JPopupMenu myJPopupMenu=new JPopupMenu();

还可以使用JPopupMenu提供的另一个构造器创建带有标题的JPopupMenu,代码如下:

JPopupMenu titleJPopupMenu=new JPopupMenu("弹出式菜单");

与JMenu一样,开发人员可以使用add方法和insert方法向JPopupMenu中添加或者插入JMenuItem与JComponent。JPopupMenu对添加到其中的每一个菜单项都赋予一个整数索引,并根据弹出式菜单的布局管理器调整菜单项显示的顺序。此外,还可以使用addSeparator方法添加分隔线,并且JPopupMenu也会为该分隔线指定一个整数索引。

开发人员通过调用弹出式菜单触发器对应的show方法来显示弹出式菜单,show方法会在菜单显示之前对其location和invoker属性加以设定。

开发人员应该检查所有的MouseEvent事件,看其是否是弹出式菜单触发器,然后在合适的时候显示弹出式菜单,下面的showJPopupMenu方法在收到适当的触发器事件时就会显示弹出式菜单,代码如下:

public void showJPopupMenu(MouseEvent e){

if(e.isPopupTrigger()){

        myJPopupMenu.show(invoker,e.getX(),e.getY());

}

}

多种事件都可以取消弹出事件,如单击菜单项、调整调用控件的大小、移动、关闭、最小化或者最大化父窗口等。

JPopupMenu类提供了很多方法供开发人员使用,表9-7给出了其中一些常用的方法及其说明。

表9-7                                               JPopupMenu类常用方法及说明

方    法

说    明

getInvoker()

返回作为此弹出菜单的“调用者”的控件

setInvoker(Component invoker)

设置弹出菜单的调用者,即弹出菜单在其中显示的控件

addPopupMenuListener(PopupMenu Listener l)

添加PopupMenu侦听器

removePopupMenuListener(PopupMenuListener l)

移除PopupMenu侦听器

getPopupMenuListeners()

返回利用addPopupMenuListener()添加到此JMenuItem的所有PopupMenuListener组成的数组

getLabel()

返回弹出菜单的标签

setLabel(String label)

设置弹出菜单的标签

show(Component invoker,int x,int y)

在调用者的座标空间中的位置X、Y处显示弹出菜单

getComponentIndex(Component c)

返回指定控件的索引

setPopupSize(Dimension d)

使用Dimension对象设置弹出菜单的大小。此操作等效于setPreferredSize(d)

setPopupSize(int width   int height)

将弹出菜单的大小设置为指定的宽度和高度。此操作等效于setPreferredSize(new Dimension(width, height))

getComponent()

返回此JPopupMenu控件

isPopupTrigger(MouseEvent e)

如果当前系统将MouseEvent视为弹出菜单触发器,则返回true

下面给出了一个使用JPopupMenu的简单例子,示例代码如下:

package org.netbeans.swing.menu;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class DemoJPopupMenu extends JFrame {

JMenu fileMenu;

JPopupMenu jPopupMenuOne;

JMenuItem openFile,closeFile,exit;

JRadioButtonMenuItem copyFile,pasteFile;

ButtonGroup buttonGroupOne;

public DemoJPopupMenu(){

   jPopupMenuOne = new JPopupMenu();//创建jPopupMenuOne对象

   buttonGroupOne=new ButtonGroup();

   //创建文件菜单及子菜单,并将子菜单添加到文件菜单中

   fileMenu =new JMenu("文件");

   openFile=new JMenuItem("打开");

    closeFile=new JMenuItem("关闭");

    fileMenu.add(openFile);

    fileMenu.add( closeFile);   

    jPopupMenuOne.add(fileMenu);//将fileMenu菜单添加到弹出式菜单中

    jPopupMenuOne.addSeparator();//添加分割符

    //创建单选菜单项,并添加到ButtonGroup对象中       

   copyFile=new JRadioButtonMenuItem("复制");

   pasteFile=new JRadioButtonMenuItem("粘贴");

   buttonGroupOne.add(copyFile);

   buttonGroupOne.add(pasteFile);

    jPopupMenuOne.add(copyFile);//将copyFile添加到jPopupMenuOne中

    jPopupMenuOne.add(pasteFile);//将pasteFile添加到jPopupMenuOne中

    jPopupMenuOne.addSeparator();

    exit=new JMenuItem("退出");

    jPopupMenuOne.add(exit);//将exit添加到jPopupMenuOne中

    //创建监听器对象

    MouseListener popupListener = new PopupListener(jPopupMenuOne);

    this.addMouseListener(popupListener);//向主窗口注册监听器  

    this.setTitle("弹出式菜单的简单使用");

    this.setBounds(100,100,250,150);

    this.setVisible(true);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

    public static void main(String args[]){

     new DemoJPopupMenu();

}

    //添加内部类,其扩展了MouseAdapter类,用来处理鼠标事件

    class PopupListener extends MouseAdapter {

           JPopupMenu popupMenu;

           PopupListener(JPopupMenu popupMenu) {

               this.popupMenu = popupMenu;

           }

           public void mousePressed(MouseEvent e) {

                 showPopupMenu(e);

           }

           public void mouseReleased(MouseEvent e) {

                 showPopupMenu(e);

           }

           private void showPopupMenu(MouseEvent e) {

                if (e.isPopupTrigger()) {//如果当前事件与鼠标事件相关,则弹出菜单

                       popupMenu.show(e.getComponent(),e.getX(), e.getY());

                }结束if

           }//结束showPopupMenu

     } //结束内部类PopupListener

}//结束DemoJPopupMenu

编译并运行程序,界面如图9-18所示。在窗口中单击鼠标右键,界面如图9-19所示。

               

                图9-18 程序运行界面                    图9-19 出现弹出式菜单

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章