也就是说如何用编程实现控制鼠标指针移动到方框(该方框就是指那些网站中输入帐户密码的方框,也或者是用于搜索的方框)中,并按下左键激活它。
是用robot类还是用swing?robot好像要知道屏幕坐标(x,y)的,我想要是屏幕的尺寸不同了,运行代码起来会不会同样可以命中那个方框。具体请回答……
谢谢大家!

解决方案 »

  1.   

    requestFocus这个可以获得鼠标的焦点
      

  2.   

    可以说详细点吗?
    robot有个方法是可以让鼠标move到具体的xy坐标的,问题是我怎么才能get那个方框的坐标呢?
      

  3.   

    想要让java获得浏览器里的组件的坐标不太可能。
    要是自身程序里的组件的坐标就很容易····
      

  4.   

    1、如果是web中的textfield;用js控制  focus();
    2、如果是awt控件~~给你点例子可能会有用;
    package processmouse;import java.awt.*;
    import java.awt.event.*;
    import java.applet.Applet;public class ProcessMouse extends Applet{

    //声明整形变量,用于保存鼠标位置
    int iX,iY;
    //声明保存坐标数据的数组
    public static int[]x1 = new int[1];
    public static int[]x2 = new int[1];
    public static int[]y1 = new int[1];
    public static int[]y2 = new int[1];
    //声明字符串变量,用于说明鼠标动作
    String strMsg,strPosition;
    boolean ifClick = false;
    boolean ifReleased = true;
    Image img;
    int index=0;

    //Applet的初始化方法
    public void init(){
    img = getImage(getCodeBase(),"pic/s_656813.jpg");
    strMsg = "";
    strPosition = "";
    //激活鼠标事件
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
    //下面的语句为激活鼠标移动事件
    enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
    }

    //处理鼠标事件
    public void processMouseEvent(MouseEvent e){
    //点击鼠标按钮
    if(e.getID()==e.MOUSE_CLICKED){
    strMsg = "鼠标被点击!";
    iX = e.getX();
    iY = e.getY();
    index++;
    ifClick = true;
    repaint();
    }
    //鼠标键被按下
    if(e.getID()==e.MOUSE_PRESSED){
    strMsg = "鼠标被按下!";
    iX = e.getX();
    iY = e.getY();
    ifClick = true;
    ifReleased = false;
    ArrayBusiness ab = new ArrayBusiness();
    x1 = ab.addElement(x1,e.getX());
    y1 = ab.addElement(y1,e.getY());
    repaint();
    }
    //鼠标被释放
    if(e.getID()==e.MOUSE_RELEASED){
    strMsg = "鼠标被释放!";
    iX = e.getX();
    iY = e.getY();
    ArrayBusiness ab = new ArrayBusiness();
    x2 = ab.addElement(x2,e.getX());
    y2 = ab.addElement(y2,e.getY());
    ifReleased = true;
    repaint();
    }
    //鼠标进入Applet
    if(e.getID()==e.MOUSE_ENTERED){
    strMsg = "鼠标已进入!";
    iX = e.getX();
    iY = e.getY();
    //repaint();
    }
    //鼠标移出Applet
    if(e.getID()==e.MOUSE_EXITED){
    strMsg = "鼠标已移出!";
    iX = e.getX();
    iY = e.getY();
    //repaint();
    }
    }

    //处理鼠标移动事件
    public void processMouseMotionEvent(MouseEvent e){
    //按住鼠标键,拖动鼠标
    if(e.getID()==e.MOUSE_DRAGGED){
    strMsg = "鼠标被拖拽!";
    iX = e.getX();
    iY = e.getY();
    //repaint();
    }

    //鼠标移动
    if(e.getID()==e.MOUSE_MOVED){
    strMsg = "鼠标被移动!";
    iX = e.getX();
    iY = e.getY();
    //repaint();
    }

    }

    public void paint(Graphics g){
    strPosition = "位置在:x="+iX+" y="+iY;
    //g.setFont(new Font("TimesRoman",Font.PLAIN,18));
    g.drawString(strMsg+" "+strPosition,10,50);
    //g.drawString(strPosition,iX,iY);
    //g.drawImage(img,iX,iY,100,100,this);
    if(ifClick&&ifReleased){
    for(int i = 0; i < x1.length; i++){
    if(y2[i] > y1[i]&&x2[i] > x1[i]) {
    g.draw3DRect(x1[i],y1[i],Math.abs(x2[i]-x1[i]),Math.abs(y2[i]-y1[i]),true);
    }
    if(y2[i] > y1[i]&&x2[i] < x1[i]) {
    g.draw3DRect(x2[i],y1[i],Math.abs(x2[i]-x1[i]),Math.abs(y2[i]-y1[i]),true);
    }
    if(y2[i] < y1[i]&&x1[i] < x2[i]) {
    g.draw3DRect(x1[i],y2[i],Math.abs(x2[i]-x1[i]),Math.abs(y2[i]-y1[i]),true);
    }
    if(y2[i] < y1[i]&&x1[i] > x2[i]) {
    g.draw3DRect(x2[i],y2[i],Math.abs(x2[i]-x1[i]),Math.abs(y2[i]-y1[i]),true);
    }
    }
    }
    }

    }
      

  5.   

    很感谢8楼的热心。其实我想要b/s模式去实现,不是c/s。用控件好像是属于c/s的。是不是这样呢?学习学习