python写鼠标脚本,python实现鼠标键盘事件

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: