There are a few ways to achieve this:
Override replaceText()
TextField textField = new TextField() {
@Override public void replaceText(int start, int end, String text) {
super.replaceText(start, end, text.toUpperCase());
}
};
Use TextFormatter
textField.setTextFormatter(new TextFormatter<>((change) -> {
change.setText(change.getText().toUpperCase());
return change;
}));
This part of the answer triggers textProperty
twice and shouldn't be used. It is only here to show the original post.
Instead of using the onKeyPressed
on your TextField, use the textProperty()
of your TextField. Just add the following code inside the initialize()
of the controller.
input_search.textProperty().addListener((ov, oldValue, newValue) -> {
input_search.setText(newValue.toUpperCase());
});