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 出現彈出式菜單

 

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