java文本框使用Robot实现光标的自动跳转

来源:互联网 发布:archlinux如何配置网络 编辑:程序博客网 时间:2024/06/07 19:44
public class Robotextends Object此类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试。

使用该类生成输入事件与将事件发送到 AWT 事件队列或 AWT 组件的区别在于:事件是在平台的本机输入队列中生成的。例如,Robot.mouseMove 将实际移动鼠标光标,而不是只生成鼠标移动事件。

注意,某些平台需要特定权限或扩展来访问低级输入控件。如果当前平台配置不允许使用输入控件,那么试图构造 Robot 对象时将抛出 AWTException。例如,如果 X 服务器不支持(或没有启用)XTEST 2.2 标准扩展,则 X-Window 系统会抛出异常。

出于自测试之外的目的而使用 Robot 的应用程序应妥善处理这些错误条件。

由于懂得太少
在这里我用18个文本框实现18位身份证的输入,每输入一位后光标自动跳转到后一个文本框,同时用鼠标键盘响应事件控制光标移动
部分源码
                ID1 = new JTextField(1);
        ID2 = new JTextField(1);
        ID3 = new JTextField(1);
                ID1.addFocusListener(this);
        ID2.addFocusListener(this);
        ID3.addFocusListener(this);
        ID1.addKeyListener(this);
        ID2.addKeyListener(this);
        ID3.addKeyListener(this);
                public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        if(KeyEvent.VK_LEFT == e.getKeyCode())
        {
            Robot rb=null;
            try {
                rb = new Robot();
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            //实现shift tab按键,光标前移
            rb.keyPress(KeyEvent.VK_SHIFT);
            rb.keyPress(KeyEvent.VK_TAB);
            rb.keyRelease(KeyEvent.VK_TAB);
            rb.keyRelease(KeyEvent.VK_SHIFT);
        }
        if(KeyEvent.VK_RIGHT == e.getKeyCode())
        {
            Robot rb=null;
            try {
                rb = new Robot();
            } catch (AWTException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            //实现tab按键,光标后移
            rb.keyPress(KeyEvent.VK_TAB);
            rb.keyRelease(KeyEvent.VK_TAB);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        if(e.getKeyCode()==KeyEvent.VK_0||e.getKeyCode()==KeyEvent.VK_1||e.getKeyCode()==KeyEvent.VK_2||e.getKeyCode()==KeyEvent.VK_3||e.getKeyCode()==KeyEvent.VK_4||e.getKeyCode()==KeyEvent.VK_5||e.getKeyCode()==KeyEvent.VK_6||e.getKeyCode()==KeyEvent.VK_7||e.getKeyCode()==KeyEvent.VK_8||e.getKeyCode()==KeyEvent.VK_9)
        {
            JTextField jtf = (JTextField)e.getSource();
            if(jtf.getText().length()==1)
            {
                Robot rb=null;
                try {
                    rb = new Robot();
                } catch (AWTException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                rb.keyPress(KeyEvent.VK_TAB);
                rb.keyRelease(KeyEvent.VK_TAB);
            }
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
        JTextField limit = (JTextField)e.getSource();
        String key = limit.getText();
        if(key.length() >= 1)     //保证每个文本框里只输入一位数字
        {
            e.consume();
        }
    }

    @Override
    public void caretUpdate(CaretEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void focusGained(FocusEvent e) {
        // TODO Auto-generated method stub
        if(ID1.isFocusOwner())   //获得焦点就刷新数值
        {
            ID1.selectAll();
        }
        if(ID2.isFocusOwner())
        {
            ID2.selectAll();
        }
        if(ID3.isFocusOwner())
        {
            ID3.selectAll();
        }
}
博大精深的java略窥皮毛啊 !  
在这留下点脚印,留着将来踩踩....