单行文本框(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>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
}
});
//监听文本框选中文本的变化
tf.selectedTextProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
}
});
//过滤输入的内容,符合条件的才显示出来
tf.setTextFormatter(new TextFormatter<String>(new UnaryOperator<TextFormatter.Change>() {
@Override
public 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>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
tf.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {
@Override
public String toString(String object) {
//修改后的文本
return object;
}
@Override
public 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为文本框的默认值
- 方案二
```java
UnaryOperator<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>() {
@Override
public 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