python写鼠标脚本,python实现鼠标键盘事件
鼠标事件的事件源往往与容器有关,鼠标进入容器、离开容器、在容器中点击或拖动鼠标都会发生鼠标事件。Java语言提供了两个用于处理鼠标事件的MouseListener和MouseMotionListener接口。
接口监听器
鼠标监听器接口可以处理五种类型的鼠标事件。按下鼠标,松开鼠标,点击鼠标,鼠标进入,鼠标出去。合适的方法如下
(1) getX):鼠标的x坐标
(2)鼠标的getY: Y坐标
)3)获取修改):获取鼠标左键或右键。
)4) getClickCount):鼠标被点击的次数。
)5) getSource):获取鼠标的事件源。
(6) addMouseListener)) Monitor)。
(7)拆下监视器)。
实现鼠标监听器接口的方法如下:
)1)mouse pressed(mouse evente);
)2)mouse released(mouse evente);
)3)mouse ented(mouse evente);
)4)mouse exited(mouse evente);
)5)mouse clicked)mouse event e;
【示例】小程序中设置了记录一系列鼠标事件的文本区域。当鼠标进入小APP应用窗口时,文本区会显示“鼠标进来”。当鼠标离开窗口时,文本区会显示“鼠标离开”;按下鼠标时,文本区显示“鼠标被按下”,双击鼠标时,文本区显示“鼠标被双击”。显示鼠标的坐标。程序还会显示一个红色的圆圈,点击鼠标后圆圈的半径会增大。
进口。小程序。*;
导入javax . swing . *;
导入Java . awt . *;
导入Java . awt . event . *;
MyPanel类扩展JPanel{
公共作废打印(intr) {
graphics g=get graphics(;
g.clear rect (0,0,this.getWidth),this . getheight);
g . set color(color . red;
G.文件椭圆形(10,10,r,r);
}
}
classmywindowextendsjframeimplementsmouselistener {
JTextArea文本;
Mypanel面板;
int x,y,r=10
int mouse flg=0;
静态字符串mouseStates[]={ 按下鼠标键,释放鼠标键,放入鼠标,释放鼠标,释放鼠标,双击鼠标 };
我的窗口(字符串){
超级(s;
container con=this.get内容窗格(;
con.set布局(新gridlayout (2,1);
this.setsize (200,300);
this.set位置(100,100);
panel=new my panel(;
con.add(面板;
text=new jtextarea (10,20);
text . set background(color . blue;
con.add(文本;
addmouselistener
this . set visible(true;
this . pack(;
}
公共空白油漆(graphicsg) {
r=r 4;
如果(R80 ) {
r=10
}
现在是text . append(mouse States[mouse flg])。位置是 x , y \n 。
panel . print(r;
}
公共事件(鼠标事件e)。
x=e . getx(;
y=e . gety(;
mouse flg=0;
重画(;
}
公共事件(鼠标事件e)。
x=e . getx(;
y=e . gety(;
mouse flg=1;
repaint();
}
public void mouse enter(mouse event e){
x=e . getx();
y=e . gety();
mouse flg=2;
repaint();
}
public void mouse exited(mouse event e){
x=e . getx();
y=e . gety();
mouse flg=3;
repaint();
}
public void mouse clicked(mouse event e){
if(e.getClickCount()==2){
x=e . getx();
y=e . gety();
mouse flg=4;
repaint();
}
else{}
}
}
公共类示例6_8扩展子视图{
public void init(){
MyWindow myWnd=new MyWindow(鼠标事件通知程序);
}
}
鼠标事件可以发生在任何组件上:鼠标进入、鼠标退出、鼠标按压等。例如,在上面的程序中添加一个按钮,在button对象中添加一个鼠标监视器,将上面程序中的init()方法修改为下面的形式,它可以发出按钮上所有鼠标事件的信号。
JButton按钮;
public void init(){
Button=new JButton("按钮也可以有鼠标事件");
r=10
text=new JTextArea(15,20);
添加(按钮);
添加(文本);
button . addmouse listener(this);
}
如果程序想进一步知道鼠标左键或右键是被按下还是被单击,可以通过InputEvent类中的常量BUTTON1_MASK和BUTTON3_MASK来确定鼠标左键或右键。例如,以下表达式确定是按下还是单击鼠标右键:
e.getModifiers()==InputEvent。按钮3 _遮罩
监听器接口
监听器接口处理拖动鼠标和鼠标移动两种事件。
注册监视器的方法是:
addMouseMotionListener(监视器)
要实现的的接口方法有两个:
(1)鼠标拖动(鼠标事件e)
(2)鼠标移动(鼠标事件e)
【例】一个滚动条与显示窗口同步变化的应用程序。窗口有一个方块,用鼠标拖运方块,或用鼠标点击窗口,方块改变显示位置,相应水平和垂直滚动条的滑块也会改变它们在滚动条中的位置。反之,移动滚动条的滑块,方块在窗口中的显示位置也会改变。
导入javax。挥棒。*;
导入Java。awt。*;
导入Java。awt。事件。*;
我的窗口类扩展了JFrame{
公共我的窗口(字符串){
超级用户;
集装箱con=这个。getcontentpane();
con . set layout(new BorderLayout());
this.setLocation(100,100);
JScrollBar xAxis=new JScrollBar(JScrollBar .横向,50,1,0,100);
jScrollBar ya xis=new jScrollBar(jScrollBar .垂直,50,1,0,100);
我的听众listener=new我的听众(xAxis,yAxis,238,118);
JPanel scrolledCanvas=new JPanel();
scrolledcanvas。set layout(new BorderLayout());
scrolledCanvas.add(listener,BorderLayout .中心);
scrolledCanvas.add(xAix,BorderLayout .南);
scrolledCanvas.add(yAix,BorderLayout .东);
con.add(scrolledCanvas,BorderLayout .北);
这个。设置可见(真);
这个。pack();
}
公共维度getPreferredSize(){
返回新维度(500,300);
}
}
我的听众类扩展JComponent实现MouseListener、MouseMotionListener、AdjustmentListener{
private int x,y;
私有xScrollBar
私有yScrollBar
私有void更新滚动条(int x,int y){
int d;
d=(int)(((float)x/(float)getSize().宽度)* 100.0);
xscrollbar。setvalue(d);
d=(int)(((float)y/(float)getSize().高度)* 100.0);
yscrollbar。setvalue(d);
}
public my listener(JScrollBar xaxis,JScrollBar yaxis,int x0,int y0){
xScrollBar=xaxis
yScrollBar=yaxis
x=x0
y=y0
xscrollbar。addadjustmentlistener(this);
yscrollbar。addadjustmentlistener(this);
这个。addmouse侦听器(this);
这个。addmousemotionlistener(this);
}
公共空白油漆(图形g){
g。设置颜色(get background());
dimension size=getSize();
g.fillRect(0,0,size.width,size。身高);
g。设置颜色(颜色。蓝色);
g.fillRect(x,y,50,50);
}
public void鼠标输入(鼠标事件e){ }
公共void鼠标退出(鼠标事件e){ }
单击了公共void鼠标(鼠标事件e){ }
公共void鼠标释放(鼠标事件e){ }
移动了公共void鼠标(鼠标事件e){ }
按下公共void鼠标(鼠标事件e){
x=e . getx();
y=e . gety();
updateScrollBars(x,y);
repaint();
}
公共void鼠标被拖动(鼠标事件e){
x=e . getx();
y=e . gety();
updateScrollBars(x,y);
repaint();
}
公共无效调整值已更改(调整事件e){
if(e.getSource()==xScrollBar)
x=(int)((float)(xscrollbar。getvalue()/100.0)* getSize().宽度);
else if(e . getsource()==yScrollBar)
y=(int)((float)(yscrollbar。getvalue()/100.0)* getSize().身高);
repaint();
}
}
公共类示例6_9{
公共静态void main(){
MyWindow myWindow=new MyWindow(滚动条示意程序);
}
}
上述例子中,如果只要求通过滑动滑块,改变内容的显示位置,可以简单地使用滚动面板JScrollPane。如果是这样,关于滚动条的创建和控制都可以免去,直接由JScrollPane内部实现。参见以下修改后的我的窗口的定义:
我的窗口类扩展了JFrame{
公共我的窗口(字符串){
超级用户;
集装箱con=这个。getcontentpane();
con . set layout(new BorderLayout());
这个。setlocation(100,100);
我的监听器listener=new my listener();
listener.setPreferredSize(新维度(700,700));
JScrollPane滚动画布=新JScrollPane(监听器);
this.add(scrolledCanvas,BorderLayout .中心);
这个。设置可见(真);
这个。pack();
}
公共维度getPreferredSize(){
返回新维度(400,400);
}
}
鼠标指针形状也可以由程序控制,setCursor()方法可以设置鼠标指针形状。例如,代码集cursor(cursor . get predefined cursor(cursor . wait _ cursor))。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。