单行文本框(TextField)

  1. TextField tf = new TextField();
  2. tf.setFont(Font.font(14));//设置字体大小
  3. tf.setLayoutX(100);
  4. tf.setLayoutY(100);
  5. tf.setFocusTraversable(false);
  6. tf.setPromptText("请输入7个字以下的文字");//文本框内的浅色提示(获得焦点后就会消失)
  7. //鼠标移动到文本框上一小会,就会弹出该提示框
  8. Tooltip tip = new Tooltip("这是提示");
  9. tip.setHeight(50);
  10. tip.setWidth(100);
  11. tip.setFont(Font.font(10));
  12. tf.setTooltip(tip);
  13. tf.setFocusTraversable(false);//移除文本框的焦点
  14. //监听文本框的内容变化
  15. tf.textProperty().addListener(new ChangeListener<String>() {
  16. @Override
  17. public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
  18. }
  19. });
  20. //监听文本框选中文本的变化
  21. tf.selectedTextProperty().addListener(new ChangeListener<String>() {
  22. @Override
  23. public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
  24. }
  25. });
  26. //过滤输入的内容,符合条件的才显示出来
  27. tf.setTextFormatter(new TextFormatter<String>(new UnaryOperator<TextFormatter.Change>() {
  28. @Override
  29. public TextFormatter.Change apply(TextFormatter.Change change) {
  30. String str = change.getText();//最新输入的字符
  31. if (str.matches("[0-9]*")){
  32. return t;
  33. }
  34. //如果输入的文本为0-9,则输入有效,否则不会返回null,不会显示在文本框中
  35. return null;
  36. }
  37. }));
  38. //拦截并修改用户输入的内容
  39. tf.textProperty().addListener(new ChangeListener<String>() {
  40. @Override
  41. public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
  42. tf.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {
  43. @Override
  44. public String toString(String object) {
  45. //修改后的文本
  46. return object;
  47. }
  48. @Override
  49. public String fromString(String string) {
  50. //用户输入的文本
  51. if(string.contains("1")){
  52. //如果用户输入了1,那么我们就将用户输入的1修改为壹,然后再显示
  53. return string.replaceAll("1","壹");
  54. }
  55. return string;
  56. }
  57. }));
  58. tf.commitValue();
  59. }
  60. });

限制仅允许输入数字

  • 方案一: ```java TextFormatter formatter = new TextFormatter<>( new IntegerStringConverter(), -1, c -> Pattern.matches(“\d*”, c.getText()) ? c : null );

mTextF.setTextFormatter(formatter);

  1. 注:-1为文本框的默认值
  2. - 方案二
  3. ```java
  4. UnaryOperator<Change> filter = change -> {
  5. String text = change.getText();
  6. if (text.matches("[0-9]*")) {
  7. return change;
  8. }
  9. return null;
  10. };
  11. TextFormatter<String> textFormatter = new TextFormatter<>(filter);
  12. fieldNport = new TextField();
  13. fieldNport.setTextFormatter(textFormatter);

多行文本框(TextArea)

  1. TextArea logcatView = new TextArea()
  2. logcatView.setEditable(false);//不可编辑
  3. logcatView.setWrapText(true);//自动换行
  4. for (int i = 0;i<10;i++){
  5. logcatView.appendText("Hello,world\n")//追加文本显示
  6. }
  7. logcatView.clear();//清空

密码输入框(PasswordField)

  1. PasswordField passwordField = new PasswordField();//密码框

注:基本和上边的TextField一致

不可编辑的文本(标签)

  1. Label label = new Label("标签");

字体大小动态修改

  1. double size = mTv.getFont().getSize();
  2. mTv.setFont(new Font(size+1));

文本框字体字号+1,适用于TextArea、Label、TextField等文本框

焦点变化监听

  1. tv.focusedProperty().addListener(new ChangeListener<Boolean>() {
  2. @Override
  3. public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
  4. if (!oldValue&&newValue){
  5. }
  6. }
  7. });

TextField无法输入中文

参考资料:https://blog.csdn.net/haoranhaoshi/article/details/111593215
解决方案简述:启动时添加配置:-Djdk.gtk.version=2
如:

start javaw -jar -Djdk.gtk.version=2 xxxx.jar