2015-06-17 48 views
5

我有我的FXML一个JavaFX文本字段控制,看起来像这样...JavaFX的文本字段:自动转换文本为大写

<TextField fx:id="input_search" onKeyPressed="#keyListener" prefHeight="25.0" prefWidth="197.0" /> 

我想自动变化所有字符大写时用户正在键入。

的代码在我的控制器:

public void keyListener(KeyEvent event){ 
    //maybe transform the pressed key to uppercase here... 
} 

回答

9

而不是在你的文本字段使用onKeyPressed的,用你的文本字段的textProperty()。只需在控制器的initialize()内添加以下代码即可。

input_search.textProperty().addListener((ov, oldValue, newValue) -> { 
    input_search.setText(newValue.toUpperCase()); 
}); 
+0

谢谢,这个作品魔术! – Martin

5

从JavaFX 8u40开始,您可以在文本字段上设置TextFormatter对象。这允许您在用户输入上应用过滤器/转换器。 Here's an example

听文本属性的变化带来了触发两个变化事件的缺点,一个是初始输入(在你的情况下是小写字符),另一个是修正输入(大写字符) 。如果文本属性中有其他侦听器,则需要处理这两个事件并确定哪些事件与它们相关。 TextFormatter方法没有这个缺点。

+0

谢谢,我学到了一些新东西。但似乎还有另一个缺点。带有TextFormatter集的TextField似乎会消耗ESC KeyEvent。我现在没有时间研究它,但原因可能是使用TextFormatter设置,ESC用于取消当前编辑:http://stackoverflow.com/a/38059343/3519572 – tomorrow

相关问题