您好我正在使用 Eclipse Rcp ,我需要验证只接受整数值的文本框我已经使用了代码
txtCapacity.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent EVT) {
if((EVT.character>='0' && EVT.character<='9')){
txtCapacity.setEditable(true);
txtCapacity.setEditable(true);
} else {
txtCapacity.setEditable(false);
System.out.println("enter only the numeric number");
}
}
});
验证但问题是我不能使用退格键删除号码。请告诉我验证小数的想法。 提前谢谢
答案 0 :(得分:3)
不要使用KeyListener
!请使用VerifyListener
,因为这将处理粘贴,退格,替换.....
E.g。
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
final String oldS = text.getText();
final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);
try {
new BigDecimal(newS);
// value is decimal
} catch (final NumberFormatException numberFormatException) {
// value is not decimal
e.doit = false;
}
}
});
答案 1 :(得分:2)
当您使用侦听器时,您可以清空文本字段,而不是使其不可编辑。您可以执行类似的操作,该代码段基于您的代码。
txtCapacity.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent EVT) {
if(!(EVT.character>='0' && EVT.character<='9')){
txtCapabity.setText("");
}
}
});
或者如果您使用JFormattedTextField
则更好。我不确定你是否在SWT中有这个,即使你没有尝试寻找类似的东西。
答案 2 :(得分:1)
另一种可能性是使用Nebular中的FormattedTextField-Widget,请参阅http://www.eclipse.org/nebula/widgets/formattedtext/formattedtext.php 优点是你只需要提供一个模式,不需要编写自己的监听器..
答案 3 :(得分:0)
您可以使用此功能验证号码:
public static int validateInteger(String number) { int i = -1; try { i = Integer.parseInt(number); } catch (NumberFormatException nfe) {} catch (NullPointerException npe) {} return i; }
如果函数返回的值小于零,则它不是有效的正数。
答案 4 :(得分:0)
为验证value
是否为小数,您只需使用 -
try {
new BigDecimal(value.toString());
// value is decimal
} catch (NumberFormatException numberFormatException) {
// value is not decimal
}
答案 5 :(得分:0)
您应该在文本框中设置Document。您可以实施客户文档以过滤有效输入以满足您的要求。每次在字段中添加或删除文本时,文档都会检查整体输入是否有效。
答案 6 :(得分:0)
txtfield.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
char c=evt.getKeyChar();
if(Character.isLetter(c))
{
JOptionPane.showMessageDialog(null, "PLEASE ENTER A DIGIT", "INVALID NUMBER", JOptionPane.ERROR_MESSAGE);
txtfield.setBackground(Color.PINK);
txtfield.setText("");
String s = txtfield.getText();
if(s.length() == 0){
txtfield.setBackground(Color.PINK);
}
}
else
{
txtfield.setBackground(Color.white);
}
}
});