gpt4 book ai didi

user-interface - Javafx文本字段调整为文本长度?

转载 作者:行者123 更新时间:2023-12-04 06:39:24 25 4
gpt4 key购买 nike

大家好,我正在构建一个聊天服务器,我在屏幕上使用一个文本字段来输入用户编写的聊天消息,这个想法是当他输入消息时它就像一个人头上的气泡一样工作。

我的问题是为了不让文本框太大或太小,有没有办法让文本框调整大小(如果你愿意,可以修剪),使其适应文本字段中写入的文本?

附言我正在使用 JavaFx scenebuilder 来完成所有这些工作。

最佳答案

您可以使用 computeTextWidth com.sun.javafx.scene.control.skin.Utils 中的方法.该方法用于javafx.scene.control.Label类来计算标签内容的最小宽度。

我解决了我的问题如下:

field.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> ob, String o,
String n) {
// expand the textfield
field.setPrefWidth(TextUtils.computeTextWidth(field.getFont(),
field.getText(), 0.0D) + 10);
}
});

我在 textProperty 中添加了一个监听器,并且每次更改文本时,我都会更改 prefWidth的文本字段。

注:只要 Utils.computeTextWidth()不公开 ,我已将源代码复制到一个新类( TextUtils )。

这是完整的源代码:
package me.jone30rw.fxcontrol;

import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextBoundsType;

public class TextUtils {

static final Text helper;
static final double DEFAULT_WRAPPING_WIDTH;
static final double DEFAULT_LINE_SPACING;
static final String DEFAULT_TEXT;
static final TextBoundsType DEFAULT_BOUNDS_TYPE;
static {
helper = new Text();
DEFAULT_WRAPPING_WIDTH = helper.getWrappingWidth();
DEFAULT_LINE_SPACING = helper.getLineSpacing();
DEFAULT_TEXT = helper.getText();
DEFAULT_BOUNDS_TYPE = helper.getBoundsType();
}

public static double computeTextWidth(Font font, String text, double help0) {
// Toolkit.getToolkit().getFontLoader().computeStringWidth(field.getText(),
// field.getFont());

helper.setText(text);
helper.setFont(font);

helper.setWrappingWidth(0.0D);
helper.setLineSpacing(0.0D);
double d = Math.min(helper.prefWidth(-1.0D), help0);
helper.setWrappingWidth((int) Math.ceil(d));
d = Math.ceil(helper.getLayoutBounds().getWidth());

helper.setWrappingWidth(DEFAULT_WRAPPING_WIDTH);
helper.setLineSpacing(DEFAULT_LINE_SPACING);
helper.setText(DEFAULT_TEXT);
return d;
}
}

关于user-interface - Javafx文本字段调整为文本长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737829/

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