当前位置: 首页 > 知识库问答 >
问题:

JavaFx可扩展文本字段示例

西门威
2023-03-14

在我的公司,我们的任务是实现一个可自动扩展的文本字段。由于默认情况下不提供此功能,我们必须从头开始开发它。web上有许多可能性,如何实现它,但没有人为as工作,所以我们决定将代码放在so上,以便其他开发人员也可以使用它。由于无法展开文本字段,因此解决方案基于文本区域:

public class TextFieldExpandable extends TextArea {

private final double DEFAULT_HEIGHT = 17.0;

public TextFieldExpandable() {
setMinHeight(DEFAULT_HEIGHT);
setPrefHeight(DEFAULT_HEIGHT);
setMaxHeight(DEFAULT_HEIGHT);

disableEnter();
}

@Override
protected void layoutChildren() {
super.layoutChildren();

setWrapText(true);
setPadding(new Insets(0, 0, 0, 0));

ScrollPane scrollPane = (ScrollPane)lookup(".scroll-pane");
scrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setPadding(new Insets(0, 0, 0, 0));

StackPane viewport = (StackPane) scrollPane.lookup(".viewport");
viewport.setPadding(new Insets(0, 0, 0, 0));

Region content = (Region) viewport.lookup(".content");
content.setPadding(new Insets(-1, 1, 0, 1));

Text text = (Text) content.lookup(".text");

text.textProperty().addListener((property) -> {
  double textHeight = text.getBoundsInLocal().getHeight();
  if (textHeight < DEFAULT_HEIGHT) {
    textHeight = DEFAULT_HEIGHT;
  }

  textHeight = textHeight + 1;

  setMinHeight(textHeight);
  setPrefHeight(textHeight);
  setMaxHeight(textHeight);
  });
 }

private void disableEnter() {
setOnKeyPressed(new EventHandler<KeyEvent>() {
  @Override
  public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.ENTER) {
      event.consume();
    }
  }
});
}
}

我希望它能帮助你:)

共有2个答案

蒋权
2023-03-14

您可以在文本字段的侦听器中设置PrefWidth。

//添加列表器

'textField.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
        textField.setPrefWidth(textField.getText().length());
    }
});'
东方方伟
2023-03-14

这对我来说很好

 field.setMinWidth(40);

    field.textProperty().addListener(new ChangeListener<String>() {

     @Override
     public void changed(ObservableValue<? extends String> observable, String oldValue, 
      String newValue) {
         int len = newValue.length();
         field.setPrefWidth(len*10);
       if(newValue.isEmpty() || oldValue.isEmpty()){
            field.setPrefWidth(40);
        }        
     });
 类似资料:
  • 本文向大家介绍django2.0扩展用户字段示例,包括了django2.0扩展用户字段示例的使用技巧和注意事项,需要的朋友参考一下 创建新项目,及应用 自定义 User 类 文件myapp/models.py 文件 myproj/settings.py 文件 myproj/admin.py 更新数据库 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢

  • 我正在从事一个JavaFX 2.2项目,在使用TextField控件时遇到问题。我想限制用户可以在每个文本字段中输入的字符数。但是,我找不到属性或类似maxlength的东西。Swing中也存在同样的问题,通过这种方式解决了。JavaFX 2.2如何解决这个问题?

  • 我目前正在尝试构建一个行为类似于命令shell的应用程序。我想显示我给它的路径(或' 我这样做是为了在用户提交文本时文本字段会被清空。提交后,它将字段的文本设置为我的路径,以达到类似的效果,但用户仍然可以在输入文本时删除该路径。 如何使我的路径文本显示在字段中,但用户无法删除它? 我已经尝试过这个,但它只在提交后更新插入符号位置:

  • 我需要一些帮助。我有一个s的。 我想检查值是否发生了变化。如果是,我想知道它是哪个文本字段。我知道我可以使用侦听器来执行此操作,但这只适用于单个侦听器。 我希望它在数组上工作并确定哪个文本字段已更改。 提前感谢!

  • 我的代码中有JavaFX文本字段,希望在文本字段上为不同的事件添加一个操作。 今天,我只在文本字段中写入一些文本后按enter键时得到一个操作。如何添加处理tab press的操作?还有,当文本字段用鼠标点击失去焦点时,该如何反应? 当我读留档应该是可能的:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextFi

  • 我想确保用户在JavaFX TextField(0.0.0.0255.255.255.255)中输入有效的IPv4地址,但我似乎找不到任何有效的解决方案。 我尝试了该代码: 但是我连一个数字都打不出来...它似乎只用一个输入就可以工作