单行文本框(TextField)
TextField tf = new TextField();tf.setFont(Font.font(14));//设置字体大小tf.setLayoutX(100);tf.setLayoutY(100);tf.setFocusTraversable(false);tf.setPromptText("请输入7个字以下的文字");//文本框内的浅色提示(获得焦点后就会消失)//鼠标移动到文本框上一小会,就会弹出该提示框Tooltip tip = new Tooltip("这是提示");tip.setHeight(50);tip.setWidth(100);tip.setFont(Font.font(10));tf.setTooltip(tip);tf.setFocusTraversable(false);//移除文本框的焦点//监听文本框的内容变化tf.textProperty().addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {}});//监听文本框选中文本的变化tf.selectedTextProperty().addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {}});//过滤输入的内容,符合条件的才显示出来tf.setTextFormatter(new TextFormatter<String>(new UnaryOperator<TextFormatter.Change>() {@Overridepublic TextFormatter.Change apply(TextFormatter.Change change) {String str = change.getText();//最新输入的字符if (str.matches("[0-9]*")){return t;}//如果输入的文本为0-9,则输入有效,否则不会返回null,不会显示在文本框中return null;}}));//拦截并修改用户输入的内容tf.textProperty().addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {tf.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {@Overridepublic String toString(String object) {//修改后的文本return object;}@Overridepublic String fromString(String string) {//用户输入的文本if(string.contains("1")){//如果用户输入了1,那么我们就将用户输入的1修改为壹,然后再显示return string.replaceAll("1","壹");}return string;}}));tf.commitValue();}});
限制仅允许输入数字
- 方案一:
```java
TextFormatter
formatter = new TextFormatter<>( new IntegerStringConverter(), -1, c -> Pattern.matches(“\d*”, c.getText()) ? c : null );
mTextF.setTextFormatter(formatter);
注:-1为文本框的默认值- 方案二```javaUnaryOperator<Change> filter = change -> {String text = change.getText();if (text.matches("[0-9]*")) {return change;}return null;};TextFormatter<String> textFormatter = new TextFormatter<>(filter);fieldNport = new TextField();fieldNport.setTextFormatter(textFormatter);
多行文本框(TextArea)
TextArea logcatView = new TextArea()logcatView.setEditable(false);//不可编辑logcatView.setWrapText(true);//自动换行for (int i = 0;i<10;i++){logcatView.appendText("Hello,world\n")//追加文本显示}logcatView.clear();//清空
密码输入框(PasswordField)
PasswordField passwordField = new PasswordField();//密码框
不可编辑的文本(标签)
Label label = new Label("标签");
字体大小动态修改
double size = mTv.getFont().getSize();mTv.setFont(new Font(size+1));
文本框字体字号+1,适用于TextArea、Label、TextField等文本框
焦点变化监听
tv.focusedProperty().addListener(new ChangeListener<Boolean>() {@Overridepublic void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {if (!oldValue&&newValue){}}});
坑
TextField无法输入中文
参考资料:https://blog.csdn.net/haoranhaoshi/article/details/111593215
解决方案简述:启动时添加配置:-Djdk.gtk.version=2
如:
start javaw -jar -Djdk.gtk.version=2 xxxx.jar
