2

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

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);

        }  

}      
4

1 回答 1

2

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

但我的任务是做而不是质疑:P

第一的。我不会使用KeyListener. 这不是过滤文本组件的合适方法,您最好使用 a 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

于 2012-10-06T08:52:39.103 回答