我正在尝试自定义TextField,我不明白在用户输入时我怎么能得到这些单词?例如,如果用户输入单词“abc”,我应该逐个得到这个单词。我正在阅读Vaadin7书,但我不知道该怎么做?
我该怎么办?
感谢
答案 0 :(得分:0)
您需要TextChangeListener
。
短信/短信计数器的示例
final TextField textfield = new TextField("SMS");
textfield.setValue("");
textfield.setMaxLength(160);
// Counter for input length
final Label counter = new Label();
counter.setValue(textfield.toString().length() + " / " + textfield.getMaxLength());
// Display the current length interactively in the counter
textfield.addValueChangeListener(new TextChangeListener() {
public void textChange(TextChangeEvent event) {
int len = event.getText().length();
counter.setValue(len + " / " + textfield.getMaxLength());
}
});
// Set how fast the listener is invoked (this is default)
textfield.setTextChangeEventMode(TextChangeEventMode.LAZY);
5.8.4文字更改事件下的更多信息here。
答案 1 :(得分:0)
我使用StringBuffer解决了这个问题,而用户在键盘上输入时我得到的文字和格式是我需要的。
public class CpfField extends TextField implements TextChangeListener{
private final StringBuffer CPF = new StringBuffer();
public CpfField(){
super("CPF");
setImmediate(true);
setMaxLength(14);
addTextChangeListener(this);
}
@Override
public void textChange(TextChangeEvent event) {
if(!event.getText().trim().isEmpty()){
if(event.getText().length() == 3){
CPF.append(event.getText());
CPF.insert(3,".");
}else if(event.getText().length() == 7){
CPF.setLength(0);
CPF.append(event.getText());
CPF.insert(7,".");
}else if(event.getText().length() == 11){
CPF.setLength(0);
CPF.append(event.getText());
CPF.insert(11,"-");
}else{
CPF.setLength(0);
CPF.append(event.getText());
}
}else{
CPF.setLength(0);
setValue("");
}
setValue(CPF.toString());
}
}
感谢我的朋友