gpt4 book ai didi

java - 自动扩展 TextField 以适合文本

转载 作者:行者123 更新时间:2023-12-02 13:22:04 24 4
gpt4 key购买 nike

我想创建一个随着输入更多文本而水平扩展的文本字段。

prefColumnCount 属性绑定(bind)到 TextField 中文本的长度后,其大小会随着文本变长而增加。但是,插入符号的位置不会更新,并且无论文本长度如何,它都会卡在同一位置。用户必须手动将插入符号移到前面才能正确显示。

图片:

输入一些文本后的样子,文本没有占据整个文本字段:

将插入符号移动到文本开头后:

这是我当前的代码:

TextField textField = new TextField();
textField.prefColumnCountProperty().bind(textField.textProperty().length());
setHgrow(textField, Priority.ALWAYS);

如何解决这个问题?如有任何帮助,我们将不胜感激!

最佳答案

此示例在其自己的 css 样式场景中使用单独的测量文本变量来计算对 TextField 的首选大小的更新,以便其首选大小根据需要扩展和缩小。

short text

long text

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.*;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class MagicExpander extends Application {

@Override
public void start(Stage stage) throws Exception {
TextField textField = new ExpandingTextField();

Pane layout = new VBox(textField);
layout.setPadding(new Insets(10));

stage.setScene(new Scene(layout, 600, 40));
stage.show();
}

public static void main(String[] args) {
launch(args);
}

static class ExpandingTextField extends TextField {
private static int MAGIC_PADDING = 20;

private Text measuringText = new Text();
// To allow potential css formatting to work for the text,
// it is required that text be placed in a Scene,
// even though we never explicitly use the scene.
private Scene measuringScene = new Scene(new Group(measuringText));

ExpandingTextField() {
super();
setPrefWidth(MAGIC_PADDING);
setMinWidth(MAGIC_PADDING);
setMaxWidth(USE_PREF_SIZE);

// note if the text in your text field is styled, then you should also apply the
// a similar style to the measuring text here if you want to get an accurate measurement.

textProperty().addListener(observable -> {
measuringText.setText(getText());
setPrefWidth(measureTextWidth(measuringText) + MAGIC_PADDING);
});
}

private double measureTextWidth(Text text) {
text.applyCss();
return text.getLayoutBounds().getWidth();
}
}
}

关于java - 自动扩展 TextField 以适合文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57813131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com