项目十 鼠标和键盘事件的响应

合集下载

第10章 键盘与鼠标事件过程(2014)

第10章 键盘与鼠标事件过程(2014)

10.2
KeyDown和KeyUp事件
KeyDown事件是指程序运行时,用户按下键盘上的某个按键 (没有释放)时,具有焦点的对象所触发的事件。 KeyUp事件是指程序运行时,用户对键盘上某个已按下的按 键释放后的瞬间,具有焦点的对象所触发的事件。 其语法格式分别为: Private Sub 对象名_KeyDown(KeyCode As Integer, Shift As Integer) ...... End Sub Private Sub 对象名_KeyUp(KeyCode As Integer, Shift As Integer) ...... End Sub
10.3 鼠标事件
在前面的例子中曾多次使用鼠标事件,即单击(Click) 事件和双击( DblClick )事件,这些事件是通过快速按下 并 松 开 鼠 标 键 而 产 生 的 。 除 此 之 外 , VB 还 可 以 通 过 MouseDown 、 MouseUp 、 MouseMove 事件使应用程序对 鼠标位置及状态的变化作出响应(其中不包括拖放事件。 其实, Click 事件是由 MouseDown 和 MouseUp 组成,因 此MouseDown和MouseUp是更基本的鼠标事件。
第10章
键盘与鼠标事件过程
1. 键盘事件过程 2. 鼠标事件过程
第10章
键盘与鼠标事件过程
键盘和鼠标作为计算机最常使用的两种输 入设备,绝大多数对象都拥有键盘和鼠标事 件。
键盘事件过程可以处理当用户按下或释放 键盘上某个键时所执行的操作,而鼠标事件 过程可以用来处理与鼠标光标的移动和位置 有关的操作。
事件过程的语法格式为:
Private Sub 对象名_KeyPress(keyascii As Integer)

第10章 鼠标与键盘事件的处理

第10章 鼠标与键盘事件的处理

接口事件的处理全过程(鼠标的移动和鼠标的拖动)。 本例中还应注意的另一个技巧是,拖动鼠标时(按 着鼠标左键),我们就获得了鼠标拖动时的坐标,同时 调用repaint()方法画下这个坐时,程序首先清除paint()方 法以前所画的内容,然后再调用paint()方法。但有时 我们不想让程序清除paint()方法以前所画的所有内容。 实际上当我们调用repaint()方法时,程序自动地调用 update(Graphics g)方法(从父类Component继承下来 的)清除paint()方法以前所画的内容,然后再调用 paint()方法。因此我们可以在我们的小程序中重写这 个update(Graphics g)方法(即隐藏父类的方法),根据 需要来清除哪些部分或保留哪些部分。在这个例子中, 我们在update(Graphics g)方法体内没有清除以前所画 的内容(如果准备清除可使用clearRect方法)而是继续 调用paint()方法。
第三节 KeyListener接口及事件处理
一、KeyListener接口及其方法 接口及其方法 当按下、释放或敲击键盘上一个键时就发生了键 盘事件,在Java l.2事件模式中,必须要有发生事件 的事件源。当一个组件处于激活状态时,敲击键盘上 一个键就导致这个组件上发生了键盘事件。 事件源使用addKeyListener方法获得监视器。 监视器是一个对象,创建该对象的类必须实现接 口KeyListener。接口KeyListener中有3个方法: public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) public void KeyReleased(KeyEvent e) 当你按下键盘上某个键时,监视器就会发现,然后 方法keyPressed方法会自动执行,并且KeyEvent类

可视化实验二实现Windows应用程序对键盘与鼠标的响应。.doc

可视化实验二实现Windows应用程序对键盘与鼠标的响应。.doc

可视化实验二实现Windows应用程序对键盘与鼠标的响应。

.docVisual C++面向对象与可视化程序设计实验二实验报告一、实验目的1、使用API函数编制包含各种资源的Windows应用程序;2、实现Windows应用程序对键盘与鼠标的响应。

二、实验内容1、问题描述:(1)创建一个菜单,其中有三个菜单项,分别为“文件”、“计算”和“帮助”,其中,“文件”菜单项包含“打开”、“保存”、“画图”、“退出”等菜单选项;“计算”菜单包含“总和”、“方差”、“均方根”等菜单选项;“帮助”菜单项包含“计算总和帮助”、“计算方差帮助”和“计算均方根帮助”以及“关于”等项。

(2)若单击“画图”菜单项,则绘出P103图形。

若在用户区内按下鼠标左键,则动态创建一个包括“删除计算总和”、“添加计算平均值”和“修改计算均方差”三个菜单项的弹出式菜单,由此菜单控制“计算”菜单中菜单项删除、添加与修改。

(要求新的弹出式菜单开始时不可用,按下右键后变为可用。

)单击“修改计算均方差”菜单项后,“计算”菜单下的“计算均方差”项改为“线性拟合”,单击“添加计算平均值”菜单项后,“计算”菜单中添加上了“计算平均值”菜单项。

(3)将光标设定为自己名字中的某个字、图标设定为自己名字中的另一个字。

2、应用程序中所用到的资源、消息,简介主要函数的功能;3、程序实现4、操作结果三、程序代码#include"windows.h"#include"E08700212叶孙晓.h"HMENU hmenu,haddmenu;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARA M);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow){HWND hwnd;MSG Msg;HACCEL hAccel;WNDCLASS wndclass;char lpszMenuName[]="Menu";char lpszClassName[]="菜单";char lpszTitle[]="E08700212叶孙晓二";wndclass.style=0;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=lpszMenuName;wndclass.lpszClassName=lpszClassName;if(!RegisterClass(&wndclass)){MessageBeep(0);return FALSE;}hwnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd);hAccel=LoadAccelerators(hInstance,lpszMen uName); while(GetMessage(&Msg,NULL,0,0)){if(!TranslateAccelerator(hwnd,hAccel,&Msg)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}return Msg.wParam;LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static bool draw = false;static bool pingjunzhiadd = true;static bool left = true;HDC hdc;PAINTSTRUCT ps;HPEN hp;HBRUSH hb;switch(message){case WM_COMMAND:switch(LOWORD(wParam)){case IDM_EXIT:SendMessage(hwnd,WM_DESTROY,0,0);break;case IDM_fangchamodify:ModifyMenu(hmenu,IDM_fangcha,MF_BYCOMMAND,IDM_nihe,"线性拟合");DrawMenuBar(hwnd);break;case IDM_pingjunzhiadd:if(pingjunzhiadd){InsertMenu(hmenu,IDM_junfanggen,MF_BYCOMMAND|MF_ENABLED,IDM_pingjunz hi,"平均值");DrawMenuBar(hwnd);pingjunzhiadd = false;break;case IDM_DRAW:hmenu = GetMenu(hwnd);draw = true;break;}break;case WM_LBUTTONDOWN:if(left){hmenu=GetMenu(hwnd);haddmenu=CreateMenu();AppendMenu(haddmenu,MF_GRAYED,IDM _zonghedelete,"删除计算总和");AppendMenu(haddmenu,MF_GRAYED,IDM_fangchamodify,"修改计算方差");AppendMenu(haddmenu,MF_GRAYED,IDM _pingjunzhiadd,"添加计算平均值");InsertMenu(hmenu,3,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,"修改菜单");DrawMenuBar(hwnd);}left = false;break;case WM_RBUTTONDOWN:EnableMenuItem(haddmenu,IDM_zonghedelete,MF_ENABLED);EnableMenuItem(haddmenu,IDM_fangchamodify,MF_ENABLED);EnableMenuItem(haddmenu,IDM_pingjunzhi add,MF_ENABLED);DrawMenuBar(hwnd);break;case WM_PAINT:if(draw){hdc = BeginPaint (hwnd, &ps);SetMapMode(hdc,MM_TEXT);Rectangle(hdc,130,60,270,200);hb=CreateHatchBrush(HS_CROSS,RGB(255, 0,0));SelectObject(hdc,hb);Ellipse(hdc,130,70,270,190);hp=CreatePen(PS_DASHDOT,1,RGB(0,255,0 ));SelectObject(hdc,hp);MoveToEx(hdc,100,130,NULL);LineT o(hdc,300,130);MoveToEx(hdc,200,30,NULL);LineT o(hdc,200,230);EndPaint(hwnd,&ps);DeleteObject(hp);DeleteObject(hb);}break;case WM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,message,wParam,lParam);}return 0;} 头文件#define IDM_ADDMENU 14#define IDM_DELMENU 16 #define IDM_OPEN 11 #define IDM_SA VE 13 #define IDM_lcw 17#define IDM_DRAW 12 #define IDM_EXIT 15#define IDM_zonghe 18#define IDM_fangcha 19#define IDM_junfanggen 21 #define IDM_zonghehelp 22#define IDM_fangchahelp 23#define IDM_junfanggenhelp 24#define IDM_ABOUT 20 #define IDM_zonghedelete 30#define IDM_fangchamodify 31#define IDM_pingjunzhiadd 32#define IDM_nihe 33 #define IDM_pingjunzhi 34资源文件//Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////// // //////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"#include"windows.h"#include"E08700212叶孙晓.h"E08700212 ICON D:\E08700212二\E08700212.ICOE08700212 CURSOR D:\E08700212二\E08700212.CURMenu MENU DISCARDABLE{POPUP"文件(&F)"{MENUITEM"打开(&O)\tCtrl+O", IDM_OPENMENUITEM"画图(&G)", IDM_DRAWMENUITEM"保存(&S)", IDM_SAVE MENUITEM"另存为(&A)", IDM_lcw MENUITEM SEPARATORMENUITEM"退出(&X)", IDM_EXIT}POPUP"计算(&C)"{MENUITEM"计算总和(&S)", IDM_zongheMENUITEM"计算方差(&D)", IDM_fangchaMENUITEM"线性拟合", IDM_junfanggen}POPUP"帮助(&H)"{MENUITEM"计算总和的帮助", IDM_zonghehelpMENUITEM"计算方差的帮助", IDM_fangchahelpMENUITEM"计算均方根的帮助", IDM_junfanggenhelpMENUITEM SEPARATORMENUITEM"关于(&A)", IDM_ABOUT}/////////////////////////////////////////////////////////////////// // ////////#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////// // ////////// Chinese (中国) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif //_WIN32#ifdef APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////// // //////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLEBEGIN"resource.h\0"END2 TEXTINCLUDE DISCARDABLEBEGIN"#include ""afxres.h""\r\n""#include""windows.h""\r\n""#include""E08700212叶孙晓.h""\r\n""E08700212 ICON D:\\E08700212二\\E08700212.ICO\r\n""E08700212 CURSOR D:\\E08700212二\\E08700212.CUR\r\n""Menu MENU DISCARDABLE\r\n""{\r\n"" POPUP""文件(&F)""\r\n"" {\r\n"" MENUITEM""打开(&O)\\tCtrl+O"", IDM_OPEN \r\n"" MENUITEM""画图(&G)"", IDM_DRAW \r\n"" MENUITEM""保存(&S)"", IDM_SAVE MENUITEM""另存为(&A)"", IDM_lcw MENUITEM SEPARATOR\r\n"" MENUITEM""退出(&X)"", IDM_EXIT\r\n""\r\n"" }\r\n"" POPUP""计算(&C)""\r\n"" { \r\n"" MENUITEM""计算总和(&S)"", IDM_zonghe \r\n"" MENUITEM""计算方差(&D)"", IDM_fangcha\r\n"" MENUITEM""线性拟合"", IDM_junfanggen\r\n"" }\r\n""\r\n"" POPUP""帮助(&H)""\r\n"" { \r\n"" MENUITEM""计算总和的帮助"", IDM_zonghehelp\r\n"" MENUITEM""计算方差的帮助"", IDM_fangchahelp\r\n"" MENUITEM""计算均方根的帮助"", IDM_junfanggenhelp\r\n"" MENUITEM SEPARATOR\r\n"" MENUITEM""关于(&A)"", IDM_ABOUT\r\n"" }\0"END3 TEXTINCLUDE DISCARDABLEBEGIN"\r\n""\0"END#endif // APSTUDIO_INVOKED#endif // Chinese (中国) resources/////////////////////////////////////////////////////////////////// //////////#ifndef APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////// // //////////// Generated from the TEXTINCLUDE 3 resource.///////////////////////////////////////////////////////////////////// // ////////#endif五、实验心得通过这次实验学会了使用API函数编制包含各种资源的Windows 应用程序,在实验过程中,光标的设置,课本上对这块阐述的很简短,很多都需要自己去理解。

pygame键盘和鼠标事件的处理

pygame键盘和鼠标事件的处理

pygame键盘和⿏标事件的处理pygame 的键盘和⿏标事件的处理所谓事件,就是程序上发⽣的事。

例如⽤户按下键盘上的某个键或者单击、移动⿏标,对于这些事件,游戏程序需要作出反应。

如《pygame 图像/图形绘制》中例⼦,程序会⼀直运⾏下去,直到⽤户关闭窗⼝⽽产⽣⼀个 QUIT 事件,pygame 会接收⽤户的各种操作(例如按键盘上的键、移动⿏标等)产⽣事件。

事件随时可能发⽣,⽽且量可能会很⼤,pygame 的做法是把⼀系列的事件存放到⼀个队列⾥逐个处理。

在上节例⼦中使⽤了pygame.event.get()来处理所有事件,如果使⽤pygame.event.wait() , pygame 会等到发⽣⼀个事件时才继续下去,⼀般在游戏中不太实⽤,因为游戏往往是需要动态运作的。

pygame 的常⽤事件如下所⽰:事件产⽣途径参数QUIT⽤户按下“关闭”按钮NoneACTIVEEVENT pygame 被激活或者隐藏gain 、stateKEYDOWN键盘被按下unicode 、key 、modKEYUP键盘被放开key 、modMOUSEMOTION⿏标移动pos 、rel 、buttonsMOUSEBUTTONDOWN⿏标被按下pos 、buttonMOUSEBUTTONUP⿏标被放开pos 、button1. pygame 的键盘事件的处理通常⽤pyagme.event.get()获取所有事件,若event.type == KEYDOWN , 这时是键盘事件,再判断按键的event.key的种类(即 K_a 、 K_b 、K_LEFT 这种形式)。

⽤户也可以使⽤pygame.key.get_pressed()来获取所有被按下的键值,对应的就是键是否被按下。

keys_pressed = pygame.key.get_pressed()if keys_pressed[K_SPACE]:# 空格键被按下fire() # 发射⼦弹在 key 模块下有很多函数,如下:key.get_focused(): 返回当前的 pygame 窗⼝是否被激活。

第十讲(1) 键盘与鼠标事件过程

第十讲(1) 键盘与鼠标事件过程
32-47 58-64 91-96 123-126

0-9 A-Z a-z
各种标点符号
注:表内的为KeyPress事件能 接收的键。
ASCII码编码范围:0-127共 128个。0-31和127为控制符, 无法打印。
13 8 9
Enter
BackSpace Tab
KeyPress 事件识别范围:数 字键、字符键、标点符号键。 控制键只识别: ENTER、 TAB 和 BACKSPACE 键。
10. 2 KeyDown事件和KeyUp事件
程序运行过程中,当按下键盘某个键时,则产
生KeyDown事件,而放开该键时产生KeyUp
事件。按下某个键也会发生KeyPress事件,
但与KeyDown事件是不一样的。KeyDown
和KeyUp事件返回的是键盘的直接状态,即
该键的“扫描码”值。
KeyDown和KeyUp事件过程
控件的事件过程
形参KeyAscii,其参数值是当KeyPress事件发生时,由系统 自动传递过来的当前所按键的Ascii码值。例如,当按下“A” 键,系统传递给形参KeyAscii的值为65;而当按下“a”键时, 则系统传递给KeyAscii的值为97。
KeyPress事件能识别字母、数字、标点等键盘上
应用:对输入的数据进行验证、限制和修改 1.限制数据输入 文本框中只能接收“0”~“9”的数字字符。 Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then Msgbox “请输入0-9之间的数字” KeyAscii = 0 End If End Sub
Label2.Caption = "恭喜!,您已成功进入本系统"

C#处理鼠标和键盘事件

C#处理鼠标和键盘事件

在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。

本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程序设计和运行的软件环境:(1).微软公司视窗2000服务器版(2) FrameWork SDK Beta 2二.C#中处理鼠标相关的事件:鼠标相关的事件大致有六种,分别是:"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。

(1).如何在C#程序中定义这些事件:在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"MouseLeave"、"MouseEnter"事件的Delegate是"EventHandler",而描述后面的三个事件的Delegate是"MouseEventHandler"来描述。

这二个Delegate分别被封装在不同的命名空间,其中"EventHandler"被封装在"System"命名空间;"MouseEventHandler"被封装在"Syetem.Windows.Froms"命名空间中的。

在为"MouseHover"、"MouseLeave"、"MouseEnter"事件通过数据的类是"EventArgs",他也被封装在"System"命名空间中;而为后面的三个事件提供数据的类是"MouseEventArgs",他却被封装在"Syetem.Windows.Froms"命名空间。

第6章 Windows应用程序对键盘与鼠标的响应-PPT课件

第6章 Windows应用程序对键盘与鼠标的响应-PPT课件

//输入位置为本行的起始位置
break;
case VK_DELETE:
//处理按下键为Delete时的消息
if(nArrayPos==nNumChar) //输入位置处于本行的末尾
MessageBox(hWnd,
"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else
{
for(x=nArrayPos;x<nNumChar;x=x+1)
若字符缓冲区中已没有任 何字符,此时按下了 Delete键,则出现(5)号错 误提示信息
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
#define BufSize 30
//设置存放字符的缓冲区大小
//设置静态字符数组,存放输入的字符,字符个数不能超出缓冲区大小
操作系统在接收到键盘输入后,还要决定哪一个应用程序将响应输入
Windows系统把消息发送给具有“输入焦点(input focus)的窗口
应用程序一般有几个窗 口,但当按下某一个键 时,只有一个窗口能接 收到该键盘消息,接收 这个键盘消息的窗口称 为有“输入焦点”的窗口
有“输入焦点” 的窗口应是活 动窗口或者活 动窗口的子窗口
12
含义 非系统字符 非系统死字符 系统字符 系统死字符
6.2 键盘操作应用举例
【例6-1】本例演示键盘输入时所产生的消息序列并在窗口的客 户区显示对应的字符。
13
用户窗口区输入“这是一 个有关键盘操作的示例程 序”的字符串
程序中缓冲区大小只设30 个字符,当缓冲区满时若 再输入任何字符,就出现 (1)号错误提示

第9章 响应键盘与鼠标事件

第9章 响应键盘与鼠标事件

2020/3/22
13
9-3 拖放操作
与拖放有关的属性: DragMode启动自动拖动或手动拖动 DragIcon指定拖动时显示的图标 与拖放有关的方法: Drag启动或停止手动拖动
2020/3/22
14
9-3 拖放操作
1.启动自动拖放模式 将控件的DragMode属性设置为“1- Automatic”,在设置好自动拖动后,拖动操 作就一直保持在打开状态.
2020/3/22
17
9-3 拖放操作
【例9-4】应用拖拽事件实现复制效果。
2020/3/22
18
9
9-2-2 MouseMove事件
当鼠标指针在对象上移动时,就会 触发MouseMove事件,Visual Basic 中的大多数对象都能识别该事件。只要 鼠标指针位置发生改变,MouseMove 事件就会被识别.
2020/3/22
10
9-2-2 MouseMove事件
【例9-2】应用鼠标事件实现图片跟随效果。
2020/3/22
4
9-1-2 KeyDown和KeyUp事件
KeyDown事件和KeyUp事件的KeyCode 参数在输入字符“A”与“a”的返回值相同, 若要区别它们,则要借助于shift键和shift参 数。
KeyDown事件和KeyUp事件可识别标准
键盘上的大多数控制键,包括所有的功能键
F1~F16,编辑键PageUp、PageDown键、
第 9 章 响应键盘与鼠标事件过程
响应键盘事件 响应鼠标事件 拖放操作
2020/3/22
1
9-1 键盘事件
KeyPress事件 KeyDown事件 KeyUp事件 能够捕捉用户对键盘的所有操作
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

else if(e.getKeyChar()=='b'||e.getKeyChar()=='B') c=Color.blue;
else c=Color.black;
repaint(); }} public void paint(Graphics g) {
g.setColor(c); g.fillOval(60,60,100,100); } public static void main(String args[]){ new hh(); } }
(4)mouseExited(MouseEvent)方法,鼠标指针离开容器时, 接口监视器发现这个事件后自动调用这个方法。
new hh(); } }
10.2.3 键盘适配器类KeyAdapter
使用KeyListener接口时,即使有些方法不使用也必须在 程序中写出接口的所有方法,因此比较麻烦,而 java.awt.event.keyAdapter类本身就使用了KeyListener接口, 并对接口的三个方法增加了空方法体,因此使用keyAdapter 类时不必像使用接口那样实现所有方法,只需覆盖要响应的 键盘事件方法即可。
④事件监听器监听到事件后,会根据事件的类型调用相应的 事件处理方法。
事件源
产生事 件
事件 1
捕获事件
监视器1
事件 2
监视器2
图10-1 事件处理模型
事件处 理
事件处 理
1.java.awt.event包
(1)文本框回车、按钮单击、计时器、菜单项 引发动作事件:java.awt.event.ActionEvent 处理事件的接口:java.awt.event.ActionListener 接口中的方法:public void actionPerformed(ActionEvent event) (2)单选按钮、多选按钮、下拉列表 引发选项事件:java.awt.event.ItemEvent 处理事件的接口:java.awt.event.ItemListener 接口中的方法:public void itemStateChanged(ItemEvent event)
public void valueChanged(TreeSelectionEvent event)
(3)滑动杆(JSlider) 引发改变事件:java.swing.event.ChangeEvent 处理事件接口:java.swing.event.ChangeListener 接口中的方法:
public void stateChanged(ChangeEvent event)
JButton1=new JButton("请按M键!"); JButton1.addKeyListener(this); this.setSize(200,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jpanel1.add(JButton1); this.add(jpanel1); this.setVisible(true); }
(4)getClickCount()获取点击次数;
2.添加鼠标监视器的方法:public void addMouseListener()。
3.移去鼠标监视器的方法:public void removeMouseListener().
10.3.2 使用MouseListener接口处理鼠标事件
通过使用java.awt.event.MouseListener接口可以对鼠标事件进 行处理,它有以五个方法:
(1)mousePressed(MouseEvent)方法,按下鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(2)mouseReleased(MouseEvent)方法,松开鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(3)mouseEntered(MouseEvent)方法,鼠标指针进入容器时, 接口监视器发现这个事件后自动调用这个方法。
(3)键盘 引发动作事件:java.awt.event.KeyEvent 处理事件的接口:java.awt.event.KeyListener (4)鼠标 引发鼠标事件:java.awt.event.MouseEvent 处理事件的接口:java.awt.event.MouseListener 与java.awt.event.MouseMotionListener接口。
这个接口有三个方法: 1.keyPressed(KeyEvent e)响应按下键盘事件; 2.keyTyped(KeyEvent e)响应按下又松开键盘事件; 3.keyReleased(KeyEvent e)响应松开键盘事件; 它们都是public void方法,事件源要使用addKeyListener方 法添加监视器来获得事件。
【例10-1】对键盘事件进行响应。 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame implements KeyListener{
JButton JButton1; hh(){ JPanel jpanel1=new JPanel();
2.java.swing.event包 (1)列表(JList) 引发列表选择事件:java.swing.event.ListSelectionEvent 处理事件接口:java.swing.event.ListSelectionListener 接口中的方法:
public void valueChanged(ListSelectionEvent event) (2)树(JTree) 引发树选择事件:java.swing.event.TreeSelectionEvent 处理事件接口:java.swing.event.TreeSelectionListener 接口中的方法:
10.2 任务二 掌握对键盘事件响应方法
10.2.1 键盘事件
当键盘按下、释放、点击时都会触发键盘事件 (java.awt.event.KeyEvent),常用的KeyEvent方法是 public int getKeyCode(),它用于获取所按下键的编码 值。
键盘事件类提供了很多静态常量表示键的编码值,如: V_UP 上箭头键的编码值 VK_1 键1的编码值 VK_ENTER 表示回车编码值 VK_SPACE 表示空格键编码值
更多的键码值可以查阅Java API文档来获得。 编写键盘事件响应程序时,使用语句 if(e.getKeyCode()==KeyEvent.VK_B)可以判断是否按下了字 母键B,然后做相应处理,语句中的e是事件处理时接收的键 盘事件对象参数名。
10.2.2 键盘监听接口KeyListener
对键盘事件可以通过java.awt.event.KeyListener接口中提 供的方法来处理。
监视器负责处理事件源发生的事件。监视器是个对象,为 了处理事件源发生的事件,监视器会自动调用一个方法来 处理事件。为了让监视器能对事件源发生的事件进行处理, 创建该监视器的类必须声明实现相应的接口,即必须在类 体中给出该接口中所有方法的方法体,这样在事件源发生
事件时,监视器就自动调用执行被类实现的某个接口方法
①若要保证一个组件产生的某种类型事件XXXEvent有效, 需要注册一个“事件监听器”监听它。用如下语句设置事件 监听器:
事件源.addXXXListener(XXXListener代表某种事件监听器)。
②组件作为事件源,不同类型的组件会产生特定类型的事件。
③一旦产生事件后,事件会被传送给已注册的一个或多个监 听器。事件监听器是实现了与该事件相对应的XXXListener 接口的类。
下面的程序是通过使用键盘适配器类来实现响应键盘事 件,当分别按“R”、“G”、“B”时将圆的颜色设置为 红色、绿色和蓝色。
【例10-2】 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame{
10.3 任务三 掌握对鼠标事件的响应方法
10.3.1 鼠标事件
鼠标事件源各种动作可以触发鼠标事件,如按下鼠标、点击鼠 标、释放鼠标、鼠标进入和鼠标退出。鼠标事件类型是 java.awt.event.MouseEvent,当发生鼠标事件时 MouseEvent类自动创建一个鼠标事件对象。
1.MouseEvent类有几个常用的方法: (1)getX()用于获取鼠标x坐标 (2)getY()用于获取鼠标y坐标;
10.1.2 事件处理机制
Java采用“授权事件模型”(Event Delegation Model) 的事件处理模式。其原理为:事先定义多种事件类型 (即用户在GUI组件上进行的操作,如单击事件),当 用户对某个GUI组件进行操作时,可能触发相应的事件, 这个组件就是事件源。如果此组件注册了事件监听器 (可以通过addXXXXListener方法注册),事件被传 送给已注册的监听器,事件监听器负责处理事件的过程。 一个组件可以注册一个或多个监听器。
java.awt.AWTEvent类是所有事件类的父类。
2.事件源:能够产生事件的对象都可以称之为事件源,如 键盘、鼠标、按钮等。
3.事件处理方法:能够接收、解析处理事件类对象,实现 和用户交互的方法。它以事件对象为参数。
4.监视器:对事件源进行监视,使发生事件时做出处理的 一种特殊的对象。事件源通过调用相应的方法将某个对 象作为自己的监视器。
(3)getButton()用于获取鼠标的左中右键值;根据键值来知 道按的是哪一个键,MouseEvent.BUTTON1、 MouseEvent.BUTTON2和MouseEvent.BUTTON3分别是左 中右三个键值。例如在程序中通过 if(e.getButton()==MouseEvent.BUTTON1)可以判断按的是 否是左键。
相关文档
最新文档