我尝试了一些但没有得到结果
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);
}
}
答案 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