JavaFX TextField:自动将文本转换为大写
我的FXMl上有一个JavaFX TextField控件,看起来像这样……
我想在用户输入时自动将所有字符更改为大写 。
我控制器中的代码:
public void keyListener(KeyEvent event){ //maybe transform the pressed key to uppercase here... }
有几种方法可以实现这一目标:
覆盖replaceText()
TextField textField = new TextField() { @Override public void replaceText(int start, int end, String text) { super.replaceText(start, end, text.toUpperCase()); } };
使用TextFormatter
textField.setTextFormatter(new TextFormatter<>((change) -> { change.setText(change.getText().toUpperCase()); return change; }));
答案的这一部分触发textProperty
两次, 不应该使用。 它只是在这里显示原始post 。
不要在TextField上使用onKeyPressed
,而是使用TextField的textProperty()
。 只需在控制器的initialize()
中添加以下代码即可。
input_search.textProperty().addListener((ov, oldValue, newValue) -> { input_search.setText(newValue.toUpperCase()); });
从JavaFX 8u40开始,您可以在文本字段上设置TextFormatter对象。 这允许您在用户输入上应用filter/转换器。 这是一个例子 。
听取text属性中的更改会带来触发两个更改事件的缺点,一个用于初始输入(在您的情况下是小写字符),另一个用于更正的输入(大写字符)。 如果text属性上还有其他侦听器,则需要处理这两个事件并确定哪个事件与它们相关。 TextFormatter方法没有这个缺点。