【发布时间】:2012-08-11 22:03:41
【问题描述】:
下面是我试图开始工作以仅接受小于 65535 的值的 KeyAdapter。似乎它在实际应该的位置后面敲击了一个键。例如,如果我输入“55”,System.out.println 将产生“5”,执行“3298”将产生“329”,等等。
// Allows for unsigned short values only
KeyAdapter unsignedShortAdapter = new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
int tempInt = 0;
JTextField temp = null;
if (!((Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE)))) {
getToolkit().beep();
e.consume();
}
try {
temp = (JTextField) e.getSource();
System.out.println(temp.getText());
tempInt = (Integer.parseInt(temp.getText().toString()));
} catch (NumberFormatException e1) {
} finally {
if (tempInt > (Short.MAX_VALUE * 2)) {
getToolkit().beep();
e.consume();
temp.setText(temp.getText().substring(0, temp.getText().length() - 1));
invalidate();
}
}
}
};
【问题讨论】:
-
你必须使用
KeyListener吗?因为否则有很多更好的解决方案 -
不,我不知道。我想用我能得到的任何东西,哈哈。我只是使用 KeyListener 来防止用户输入非数字字符。
-
问题是,您在文本字段更新之前获得了击键,因此当您的文本字段包含“5”并且您按“5”时,该字段仅包含“5”你捕获击键。
-
是的,不过我不知道如何解决。
-
为此我会使用
JSpinner和SpinnerNumberModel。
标签: java swing adapter jtextfield short