【问题标题】:TextField get words typing?TextField 输入文字?
【发布时间】:2013-12-21 10:55:23
【问题描述】:
我正在尝试自定义一个 TextField,但我不明白如何在用户输入时获取单词?例如,如果用户输入单词“abc”,我应该一个一个地得到这个词。我正在阅读 Vaadin7 书,但我不知道该怎么做?
我该怎么办?
谢谢
【问题讨论】:
标签:
java
frameworks
vaadin
vaadin7
【解决方案1】:
您需要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);
更多信息here 在 5.8.4 文本更改事件下。
【解决方案2】:
哇,谢谢你的关注。
我使用 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());
}
}
谢谢我的朋友