
impl.org.controlsfx.autocompletion.AutoCompletionTextFieldBinding Maven / Gradle / Ivy
package impl.org.controlsfx.autocompletion;
import java.util.Collection;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TextField;
import javafx.util.Callback;
import javafx.util.StringConverter;
import org.controlsfx.control.textfield.AutoCompletionBinding;
/**
* Represents a binding between a text field and a auto-completion popup
*
* @param
*/
public class AutoCompletionTextFieldBinding extends AutoCompletionBinding{
/***************************************************************************
* *
* Static properties and methods *
* *
**************************************************************************/
private static StringConverter defaultStringConverter() {
return new StringConverter() {
@Override public String toString(T t) {
return t == null ? null : t.toString();
}
@SuppressWarnings("unchecked")
@Override public T fromString(String string) {
return (T) string;
}
};
}
/***************************************************************************
* *
* Private fields *
* *
**************************************************************************/
/**
* String converter to be used to convert suggestions to strings.
*/
private StringConverter converter;
/***************************************************************************
* *
* Constructors *
* *
**************************************************************************/
/**
* Creates a new auto-completion binding between the given textField
* and the given suggestion provider.
*
* @param textField
* @param suggestionProvider
*/
public AutoCompletionTextFieldBinding(final TextField textField,
Callback> suggestionProvider) {
this(textField, suggestionProvider, AutoCompletionTextFieldBinding
.defaultStringConverter());
}
/**
* Creates a new auto-completion binding between the given textField
* and the given suggestion provider.
*
* @param textField
* @param suggestionProvider
*/
public AutoCompletionTextFieldBinding(final TextField textField,
Callback> suggestionProvider,
final StringConverter converter) {
super(textField, suggestionProvider, converter);
this.converter = converter;
getCompletionTarget().textProperty().addListener(textChangeListener);
getCompletionTarget().focusedProperty().addListener(focusChangedListener);
}
/***************************************************************************
* *
* Public API *
* *
**************************************************************************/
/** {@inheritDoc} */
@Override public TextField getCompletionTarget(){
return (TextField)super.getCompletionTarget();
}
/** {@inheritDoc} */
@Override public void dispose(){
getCompletionTarget().textProperty().removeListener(textChangeListener);
getCompletionTarget().focusedProperty().removeListener(focusChangedListener);
}
/** {@inheritDoc} */
@Override protected void completeUserInput(T completion){
String newText = converter.toString(completion);
getCompletionTarget().setText(newText);
getCompletionTarget().positionCaret(newText.length());
}
/***************************************************************************
* *
* Event Listeners *
* *
**************************************************************************/
private final ChangeListener textChangeListener = new ChangeListener() {
@Override public void changed(ObservableValue extends String> obs, String oldText, String newText) {
if (getCompletionTarget().isFocused()) {
setUserInput(newText);
}
}
};
private final ChangeListener focusChangedListener = new ChangeListener() {
@Override public void changed(ObservableValue extends Boolean> obs, Boolean oldFocused, Boolean newFocused) {
if(newFocused == false)
hidePopup();
}
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy