123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package com.vaadin.tests.components.textfield;
-
- import com.vaadin.data.HasValue;
- import com.vaadin.data.HasValue.ValueChangeListener;
- import com.vaadin.server.VaadinRequest;
- import com.vaadin.shared.ui.ValueChangeMode;
- import com.vaadin.tests.components.AbstractTestUIWithLog;
- import com.vaadin.tests.util.TestUtils;
- import com.vaadin.ui.AbstractTextField;
- import com.vaadin.ui.TextArea;
- import com.vaadin.ui.TextField;
-
- public class TextChangeEvents extends AbstractTestUIWithLog {
-
- @Override
- protected void setup(VaadinRequest request) {
-
- TextField textField = new TextField("Default");
-
- ValueChangeListener<String> listener = event -> log(
- "Text change event for " + event.getComponent().getCaption()
- + ", text content currently:'" + event.getValue()
- + "' Cursor at index:"
- + ((AbstractTextField) event.getSource())
- .getCursorPosition());
-
- textField.addValueChangeListener(listener);
- addComponent(textField);
-
- TextField eager = new TextField("Eager");
- eager.addValueChangeListener(listener);
- eager.setValueChangeMode(ValueChangeMode.EAGER);
- addComponent(eager);
-
- TextField timeout = new TextField("Timeout 3s");
- timeout.addValueChangeListener(listener);
- timeout.setValueChangeMode(ValueChangeMode.EAGER);
- timeout.setValueChangeTimeout(3000);
- addComponent(timeout);
-
- TextArea textArea = new TextArea("Default text area");
- textArea.addValueChangeListener(listener);
- addComponent(textArea);
-
- TextArea textAreaTimeout = new TextArea("Timeout 3s");
- textAreaTimeout.addValueChangeListener(listener);
- textAreaTimeout.setValueChangeMode(ValueChangeMode.TIMEOUT);
- textAreaTimeout.setValueChangeTimeout(3000);
- addComponent(textAreaTimeout);
-
- VaadinDeveloperNameField vd = new VaadinDeveloperNameField();
- vd.addValueChangeListener(listener);
- addComponent(vd);
- }
-
- @Override
- protected String getTestDescription() {
- return "Simple TextChangeEvent test cases.";
- }
-
- /**
- * "Autosuggest"
- *
- * Known issue is timing if suggestion comes while typing more content. IMO
- * we will not support this kind of features in default TextField, but
- * hopefully make it easily extendable to perfect suggest feature. MT
- * 2010-10
- *
- */
- private class VaadinDeveloperNameField extends TextField
- implements HasValue.ValueChangeListener<String> {
- private String[] names = new String[] { "Matti Tahvonen",
- "Marc Englund", "Joonas Lehtinen", "Jouni Koivuviita",
- "Marko Grönroos", "Artur Signell" };
-
- public VaadinDeveloperNameField() {
- setCaption("Start typing 'old' Vaadin developers.");
- addValueChangeListener(this);
- setStyleName("nomatch");
- }
-
- @Override
- public void attach() {
- super.attach();
- TestUtils.injectCSS(getUI(), ".match { background:green ;} "
- + ".nomatch {background:red;}");
- }
-
- @Override
- public void valueChange(HasValue.ValueChangeEvent<String> event) {
- boolean atTheEndOfText = event.getValue()
- .length() == getCursorPosition();
- String match = findMatch(event.getValue());
- if (match != null) {
- setStyleName("match");
- String curText = event.getValue();
- int matchlenght = curText.length();
- // autocomplete if garret is at the end of the text
- if (atTheEndOfText) {
- suggest(match, matchlenght);
- }
- } else {
- setStyleName("nomatch");
- }
- }
-
- private void suggest(String match, int matchlenght) {
- setValue(match);
- setSelection(matchlenght, match.length() - matchlenght);
- }
-
- private String findMatch(String currentTextContent) {
- if (!currentTextContent.isEmpty()) {
- for (int i = 0; i < names.length; i++) {
- if (names[i].startsWith(currentTextContent)) {
- return names[i];
- }
- }
- }
- return null;
- }
-
- }
-
- }
|