我想控制jtextfield上的用户输入文本。似乎在netbean 8中找不到任何好的方法。在C#
中使用keypress event
,但是在java
中,我是新手。
我选择了key type
事件
我只想输入小数点后2位的数字
10.00
1224547885544.12
545545464646464646465466.10
不是
12121212.654654654654
我尝试过
// not a good idea
char c=evt.getKeyChar();
if((Character.isDigit(c))||(c==KeyEvent.VK_PERIOD)||(c==KeyEvent.VK_BACK_SPACE)){
int punto=0;
if(c==KeyEvent.VK_PERIOD){
String s=pricefield.getText();
int dot=s.indexOf('.');
punto=dot;
if(dot!=-1){
getToolkit().beep();
evt.consume();
}
}
}
else{
getToolkit().beep();
evt.consume();
}
//second try
char enter = evt.getKeyChar();
if(!(Character.isDigit(enter))){
evt.consume();
}
我认为这不是一个好主意。
尝试许多其他方式。
请帮助我。
答案 0 :(得分:0)
假设您所指的是JavaFX TextField
:
您可以通过调用textProperty
获得文本字段的textField.textProperty()
。由于这是一个属性,因此您可以在其上附加一个侦听器,以侦听字段中文本的更改:
textField.textProperty().addListener((observable, oldValue, newValue) -> {
// this code is called whenever the text in the field changes
// oldValue is the text contained before the event was triggered
// newValue is the text that the field is about to be set to
if (oldValue.contains("[a-zA-Z]")) { // any predicate you want/need
textField.setText(oldValue); // revert the text of the field back to its old value
}
});
答案 1 :(得分:0)
对于Swing TextField
,这应该可以帮助您:
JFormattedTextField textField = new JFormattedTextField();
textField.setFormatterFactory(new AbstractFormatterFactory() {
@Override
public AbstractFormatter getFormatter(JFormattedTextField tf) {
NumberFormat format = DecimalFormat.getInstance();
//or two, if you want to force something like 10.00
format.setMinimumFractionDigits(0);
format.setMaximumFractionDigits(2);
format.setRoundingMode(RoundingMode.HALF_UP);
InternationalFormatter formatter = new InternationalFormatter(format);
formatter.setAllowsInvalid(false); //important!
return formatter;
}
});