在java swing中输入文本字段后自动选项卡?

时间:2012-10-06 08:14:30

标签: java swing jtextfield

我尝试了一些但没有得到结果

private void txtNameKeyPressed(java.awt.event.KeyEvent evt) {                                   
    String value = txtName.getText();
    digitcheck = value;
    if ((evt.getKeyCode() >= KeyEvent.VK_1 && evt.getKeyCode() <= KeyEvent.VK_2)) 
        {
            txtName.setEditable(true);

            //If the Digit in JTextField exceeds two digits JTextField is deactivated
            if(maxDigit(1))
            {
                try {
                    txtName.setEditable(true);
                    txtAdd.setEnabled(true);
                    Robot robot = new Robot();
                    robot.keyRelease(KeyEvent.VK_TAB);
                } catch (AWTException ex) {
                    Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            else
            {
                txtAdd.setEnabled(false);
            }
        }
        else 
        {
            txtAdd.setEnabled(false);

        }  

}      

1 个答案:

答案 0 :(得分:2)

我的第一个是“为什么”,我的第二个是“为什么不使用复选框?”

但我的意思是做而不是质疑:P

首先。我不会使用KeyListener。这不是用于过滤文本组件的合适方法,您最好使用DocumentFilter,这样您就可以自动限制添加到文本字段中的字符数量和类型。

其次,我可能不会在这种情况下使用Robot,但那只是我。

我可能只是使用内置的transferFocus方法。它更简单,并考虑了密钥传输API ...

((AbstractDocument)field1.getDocument()).setDocumentFilter(new DocumentFilter() {

    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
        super.insertString(fb, offset, string, attr);
    }

    @Override
    public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
        super.remove(fb, offset, length);
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        if (text.startsWith("1") || text.startsWith("2")) {

            field1.transferFocus();

        }
        super.replace(fb, offset, length, text, attrs);
    }

});

有关DocumentFilter

的一些优秀示例,请查看here