package regexgolf2.ui.subcomponents.solutionediting; import java.util.ArrayList; import java.util.EventObject; import java.util.List; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.TextField; public class SolutionEditingUI { private final List<TextChangedListener> _listeners = new ArrayList<>(); private final TextField _textField; private boolean _isInternalTextChange; public SolutionEditingUI(TextField textField) { _textField = textField; init(); } private void init() { _textField.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> arg0, String arg1, String arg2) { if (!_isInternalTextChange) { fireTextChangedEvent(); } } }); } public void setText(String text) { _isInternalTextChange = true; _textField.setText(text); _isInternalTextChange = false; } public String getText() { return _textField.getText(); } private void fireTextChangedEvent() { EventObject event = new EventObject(this); for (TextChangedListener listener : _listeners) { listener.textChanged(event); } } public void addTextChangedListener(TextChangedListener listener) { _listeners.add(listener); } public void removeTextChangedListener(TextChangedListener listener) { _listeners.remove(listener); } }