鼠標和鍵盤事件處理函數
所謂事件,就是指在系統中有某些我們所關心的事情(例如:鼠標移動了,用戶按下了某個按鍵……等)發生了,然後系統便通知我們去處理這些事情。這樣的概念在一般采用窗口用戶界面環境的操作系統中,是十分常見的。
在Java中,所有的事件都定義在類Event(java.awt.Event)內,讀者有興趣的話,可以參考Java的API。
1)鼠標事件。
鼠標時間一般有:
mouseDown:當鼠標的按鍵被用戶按下時,就會發生MOUSE_DOWN時間,這個時候系統便調用方法mouseDown對該事件進行處理。方法mouseDown的寫法為:
public boolean mouseDown(Event e,int x,int y)
{
……
}
由上面可知,方法mouseDown有三個參數:e,x,y。e就是事件本身,我們把“事件”看成一個對象實體,只不過它的類是Event而已,同時,事件在使用上和一般的對象實體沒有差別。而x,y則是這個時間發生時的鼠標的坐標值。要注意的是它的方法返回值是boolean型的值,這點要注意!另外,由於有些機器的鼠標只有一個按鍵,考慮到Java的與平台無關性,因此,這個方法中,就沒有我們常見的右鍵的功能了。它不區分左右按鍵。
mouseUp:與前面的相反,這個方法是鼠標放開時的處理函數了,對於使用方法,與mouseDown完全相同。這兒就不多說了!
mouseMove:MOUSE_MOVE和MOUSE_DRAG都是由鼠標移動產生的事件,方法mouseMove就是用來處理MOUSE_MOVE事件的。方法為:
public boolean mouseMove(Event evt,int x,int y)
{
……
}
所用到的參數和方法mouseDown和mouseUp的完全一樣。
mouseDrag:從上面知道,這個方法當然是用來處理MOUSE_DRAG事件的。方法為:
public boolean mouseDrag(Event e,int x,int y)
{
……
}
mouseEnter:這個方法是用來處理MOUSE_ENTER事件的,當鼠標進入到小應用程序的窗口范圍時,就會發生MOUSE_ENTER事件。處理方法為 :
public boolean(Event evt, int x,int y)
{
……
}
所用到的參數和前面一樣,不多說了。
mouseExit:這個方法是用來處理MOUSE_EXIT事件的。當鼠標從小應用程序窗口移出來的時候,就會發生MOUSE_EXIT事件了。處理方法為:
public boolean (Event e,int x,int y)
{
……
}
好了,讓我們來看一看具體的例子:
2)鍵盤事件:
和鼠標比起來,鍵盤產生的時間就簡單多了,一般說來,我們關心的就是用戶按下了什麼鍵,再處理就行了,而不必像鼠標那樣還具有移動的事件要處理。它的主要事件有:
KEY_PRESS:按下鍵時產生;
KEY_RELEASE:放開鍵盤按鍵的時候產生。處理它們方法方法分別為:
public boolean keyDown(Event evt,int x,int y)
{
……
}
public loolean keyUp(Event evt,int x,int y)
{
……
}
參數中的evt還是表示事件本身的對象,而key就是那個被用戶按下或放開的案件。Java已經在類Event中,定義好一些表轉的按鍵值,如下:
類變量代表的按鍵類變量代表的按鍵
Event.Up方向鍵中的“上”鍵Event.F3“F3”鍵
Event.DOWN方向鍵中的“下”鍵Event.F4“F4”鍵
Event.LEFT方向鍵中的“左”鍵Event.F5“F5”鍵
Event.RIGHT方向鍵中的“右”鍵Event.F6“F6”鍵
Event.HOME“Home”鍵Event.F7“F7”鍵
Event.END“End”鍵Event.F8“F8”鍵
Event.PGUP“Page Up”鍵Event.F9“F9”鍵
Event.PGDN“Page Down”鍵Event.F10“F10”鍵
Event.F1“F1”鍵Event.F11“F11”鍵
Event.F2“F2”鍵Event.F12“F12”鍵
鼠標事件例子 1
這個例子的源代碼如下:
import Java.applet.*;
import Java.awt.*;
//前面的例子中說過了的,就不再說了。 ^_^
public class Aa1 extends Applet
{
int cx=50;
int cy=50;
//定義鼠標的初始位置,也就是當你還沒有按下鼠標時的字符串將出現
的位置。
public boolean mouseDown(Event e,int x,int y)
//定義鼠標按下函數,這是一個布爾類型的函數,也就是只有真和假兩種
狀況的函數。
//參數e是鼠標按下狀態參數,當鼠標按下時,e值就為真,x,y是鼠標的
位置參數。
{
cx=x;
cy=y;
//重新定義字符串的位置參數,使字符串的位置為鼠標按下的位置。
repaint();
//重新繪制屏幕,使字符串位置更新。
return true;
//返回函數,此函數為真。
}
public void paint(Graphics g)
//paint函數,繪制屏幕函數,浏覽器從這兒開始知道怎麼繪制屏幕,
繪制些什麼。
//這兒是在cx,cy位置繪制一個字符串,使其顯示出來。
{
g.drawString("在哪兒按鼠標,我就在哪出現!",cx,cy);
}
}
這個程序,浏覽器從paint函數處執行,第一次調用時,cx,cy值是程序開始時定義的值,它然後才響應用戶在屏幕上按鼠標時的值,由mouseDown來執行,改變後,重新繪圖,這樣,就達到了開始的目的。
鼠標事件例子2
這個例子的源代碼如下:
import Java.awt.*;
import Java.applet.* ;
public class Mouse extends Applet
{
String msg="";
//定義一條字符串變量,存儲要輸出的消息。
public boolean mouseEnter(Event e,int x,int y)
{
msg="你進來了,真討厭!拿開!拿開!!把鼠標拿開吧!";
repaint(); //重新繪畫屏幕
return true; //返回真的布爾值
}
public boolean mouseExit(Event e,int x,int y)
{
msg="你把鼠標移開了,別走嘛!為什麼不把鼠標移進來呀?";
repaint();
return true;
}
public void paint(Graphics g)
{
g.drawString (msg,4,20); //顯示消息
}
}
鍵盤事件例子這個例子需要你先用鼠標在JavaApplet區域中點一下,然後就可以在鍵盤上面按鍵了,你的每一次按的什麼鍵,都可以在屏幕上面顯示出來,沒有騙你,試試看吧!這個例子的源代碼如下:import Java.awt.Event ;
import Java.awt.Graphics ;
import Java.applet.*;
public class KeyStrike extends Applet
{
char PressKey=0;
int Outx=5,Outy=15; //定義初始的輸出位置
public boolean keyDown(Event e, int key)//鍵盤處理方法
{
switch(key) //確定按下的鍵值
{
case Event.UP:Outy--;break; //如果按下的是向上鍵則……
case Event.DOWN:Outy++;break; //如果按下的是向下鍵則……
case Event.LEFT:Outx--;break; //如果按下的是向左鍵則……
case Event.RIGHT :Outx++;break; //如果按下的是向右鍵則……
case Event.HOME :Outx=5;Outy=15;break;//如果按下的是向Home鍵則
case Event.END :Outx=5;Outy=size().height -15;break;
/如果按下的是End鍵則……
case Event.PGUP :Outy-=5;break; //如果按下的是PageUp鍵則……
case Event.PGDN :Outy+=15;break; //如果按下的是Page Down鍵則
default:PressKey=(char)key;break; //如果按下的不是以上鍵則……
}
repaint();
return true;
}
public void paint(Graphics g)
{
if(PressKey!=0)
g.drawString ("你按下了: "+PressKey+" 鍵",Outx,Outy);
//顯示按鍵信息!
}