1. 程式人生 > >十. 圖形界面(GUI)設計13.鼠標事件

十. 圖形界面(GUI)設計13.鼠標事件

jframe getx dimens red end 查看源文件 wait set dimen

鼠標事件的事件源往往與容器相關,當鼠標進入容器、離開容器,或者在容器中單擊鼠標、拖動鼠標時都會發生鼠標事件。java語言為處理鼠標事件提供兩個接口:MouseListener,MouseMotionListener接口。

MouseListener接口

MouseListener接口能處理5種鼠標事件:按下鼠標,釋放鼠標,點擊鼠標、鼠標進入、鼠標退出。相應的方法有:
(1) getX():鼠標的X坐標
(2) getY():鼠標的Y坐標
(3) getModifiers():獲取鼠標的左鍵或右鍵。
(4) getClickCount():鼠標被點擊的次數。
(5) getSource():獲取發生鼠標的事件源。
(6) addMouseListener(監視器):加放監視器。
(7) removeMouseListener(監視器):移去監視器。

要實現的MouseListener接口的方法有:
(1) mousePressed(MouseEvent e);
(2) mouseReleased(MouseEvent e);
(3) mouseEntered(MouseEvent e);
(4) mouseExited(MouseEvent e);
(5) mouseClicked(MouseEvent e);

【例 11-18】小應用程序設置了一個文本區,用於記錄一系列鼠標事件。當鼠標進入小應用程序窗口時,文本區顯示“鼠標進來”;當鼠標離開 窗口時,文本區顯示“鼠標走開”;當鼠標被按下時,文本區顯示“鼠標按下”,當鼠標被雙擊時,文本區顯示“鼠標雙擊”;並顯示鼠標的坐標。程序還顯示一個紅色的圓,當點擊鼠標時,圓的半徑會不斷地變大(查看源文件)。

任何組件上都可以發生鼠標事件:鼠標進入、鼠標退出、按下鼠標等。例如,在上述程序中添加一個按鈕,並給按鈕對象添加鼠標監視器,將上述程序中的init()方法修改成如下形式,即能示意按鈕上的所有鼠標事件。
JButton button;
public void init(){
button = new JButton(“按鈕也能發生鼠標事件”);
r = 10;
text = new JTextArea(15,20);
add(button);
add(text);
button.addMouseListener(this);
}

如果程序希望進一步知道按下或點擊的是鼠標左鍵或右鍵,鼠標的左鍵或右鍵可用InputEvent類中的常量BUTTON1_MASK和BUTTON3_MASK來判定。例如,以下表達式判斷是否按下或點擊了鼠標右鍵:
e.getModifiers()==InputEvent. BUTTON3_MASK

MouseMotionListener接口

MouseMotionListener接口處理拖動鼠標和鼠標移動兩種事件。

註冊監視器的方法是:
addMouseMotionListener(監視器)
要實現的的接口方法有兩個:
(1) mouseDragged(MouseEvent e)
(2) mouseMoved(MouseEvent e)

【例 11-19】一個滾動條與顯示窗口同步變化的應用程序。窗口有一個方塊,用鼠標拖運方塊,或用鼠標點擊窗口,方塊改變顯示位置,相應水平和垂直滾動條的滑塊也會改變它們在滾動條中的位置。反之,移動滾動條的滑塊,方塊在窗口中的顯示位置也會改變(查看源文件)。

上述例子中,如果只要求通過滑動滑塊,改變內容的顯示位置,可以簡單地使用滾動面板JScrollPane。如果是這樣,關於滾動條的創建和控制都可以免去,直接由JScrollPane內部實現。參見以下修改後的MyWindow的定義:
class MyWindow extends JFrame{
public MyWindow(String s){
super(s);
Container con = this.getContentPane();
con.setLayout(new BorderLayout());
this.setLocaltion(100,100);
MyListener listener = new MyListener();
listener.setPreferredSize(new Dimension(700,700));
JScrollPane scrolledCanvas = new JScrollPane www.yuheng119.com (listener);

this.add(scrolledCanvas,BorderLayout.CENTER);
this.setVisible(true);
this.pack();
}
public Dimension getPreferredSize(){
return new Dimension(400,400);
}
}
鼠標指針形狀也能由程序控制 ,setCursor()方法能設置鼠標指針形狀。例如,代碼setCursor(Cursor.getPredefinedCursor(cursor.WAIT_CURSOR))。

十. 圖形界面(GUI)設計13.鼠標事件