本文將通過實例介紹如何用鼠標右鍵啟動彈出式菜單
以及如何執行菜單的
指令
大家對彈出式菜單(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中的顯示
從以上的例子我們看到利用鼠標右鍵來啟動彈出式菜單是非常容易的
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19180.html