gpt4 book ai didi

JavaFX - 限制 TextArea 行?

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:46 25 4
gpt4 key购买 nike

在 Swing 中,我创建了一个自定义文档,它能够确定和限制 TextArea 中的行数,无论是换行还是按下换行。我希望在 FX 中找到类似的东西,但没能找到。关于如何处理限制允许的行数的任何建议?

编辑:这就是我试图弄清楚 TextArea 中有多少换行的方法。最大的问题是获取要传递给 setWrappingWidth 的确切宽度,因为 TextArea 的内容和边框上似乎有一些填充。

Text helper = new Text();
helper.setText(text);
helper.setFont(getFont());
helper.wrappingWidthProperty().bind(widthBinding);
Font font = getFont();
FontMetrics fontMetrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(font);
int preferredHeight = new Double(helper.getLayoutBounds().getHeight()).intValue();
int lineHeight = new Double(fontMetrics.getMaxAscent() + fontMetrics.getMaxDescent()).intValue();
System.err.println("preferredHeight / lineHeight: " + preferredHeight / lineHeight);
return preferredHeight / lineHeight;

最佳答案

每个 TextInputControl 都有一个 TextFormatter自 Java 8 Update 40 起用于此任务。

它有两个功能,其中一个可以用于您的任务:

A filter (getFilter()) that can intercept and modify user input. This helps to keep the text in the desired format.

这是解决这个问题的非常原始的尝试:

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();

final TextArea textArea = new TextArea();
textArea.setTextFormatter(createTextFormatter());
root.setCenter(textArea);

primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}

private static <T> TextFormatter<T> createTextFormatter() {

final IntegerProperty lines = new SimpleIntegerProperty(1);

return new TextFormatter<>(change -> {
if (change.isAdded()) {
if (change.getText().indexOf('\n') > -1) {
lines.set(lines.get() + 1);
}
if (lines.get() > 10) {
change.setText("");
}
}
return change;
});
}

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

这成功地阻止了用户输入超过 10 行。但是你应该改进这个解决方案,例如处理:

  • 文本已被替换
  • 文字已删除

TextFormatter 非常强大,应该能够处理所有这些。

关于JavaFX - 限制 TextArea 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193279/

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