Tom*_*mmo 11 java textarea javafx limit maxlength
在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;
Run Code Online (Sandbox Code Playgroud)
自Java 8 Update 40以来,每个人TextInputControl
都有TextFormatter
这个任务.
它有两个功能,其中一个可用于您的任务:
可以拦截和修改用户输入的过滤器(getFilter()).这有助于使文本保持所需的格式.
这是一个非常原始的尝试来解决这个问题:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这成功阻止用户输入超过10行.但是你应该改进这个解决方案,例如处理:
这TextFormatter
真的很强大,应该能够处理所有这些.
归档时间: |
|
查看次数: |
5477 次 |
最近记录: |