JavaFX TextField:自动将文本转换为大写

我的FXMl上有一个 JavaFX TextField控件,看起来像这样……
<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...
}

解决方法

有几种方法可以实现这一目标:

覆盖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两次,不应该使用.它只是在这里显示原始帖子.

不要在TextField上使用onKeypressed,而是使用TextField的textproperty().只需在控制器的initialize()中添加以下代码即可.

input_search.textproperty().addListener((ov,oldValue,newValue) -> {
     input_search.setText(newValue.toupperCase());
});

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...