gpt4 book ai didi

java - 如何使用 JavaFX TextField 最大长度

转载 作者:搜寻专家 更新时间:2023-10-31 08:15:14 25 4
gpt4 key购买 nike

如何在我的 JavaFX 主类中使用此代码,以便我可以在 JavaFX TextField 中设置最大字符长度?

class LimitedTextField extends TextField {

private final int limit;

public LimitedTextField(int limit) {
this.limit = limit;
}

@Override
public void replaceText(int start, int end, String text) {
super.replaceText(start, end, text);
verify();
}

@Override
public void replaceSelection(String text) {
super.replaceSelection(text);
verify();
}

private void verify() {
if (getText().length() > limit) {
setText(getText().substring(0, limit));
}

}
};

我的 JavaFX 主类如下:

public class TextFiled extends Application {
@Override
public void start(Stage primaryStage) {
final TextField t_fname = new TextField();

StackPane root = new StackPane();
root.getChildren().add(t_fname);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}

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

最佳答案

虽然 OP 的技术问题是 correctly answered (虽然未被接受),但基本问题的解决方案 - 如何限制/验证文本字段中的输入已在其他帖子中回答 - 随着时间的推移发生了变化。

在 java8u40 中,我们得到了一个新的类 TextFormatter:它的主要职责之一是提供一个钩子(Hook),以便在它被提交到内容之前对文本输入的任何更改提供一个钩子(Hook)。为了满足将输入限制在一定长度的要求(并且 - 只是为了好玩 - 显示带有错误消息的上下文菜单)我们会

  • 实现一个分析所有变化的 UnaryOperator
  • 拒绝那些会导致文本变长的内容(并显示消息)
  • 接受所有其他更改
  • 用运算符实例化一个 TextFormatter
  • 使用 TextFormatter 配置 TextField

一段代码:

int len = 20;
TextField field = new TextField("max chars: " + len );
// here we reject any change which exceeds the length
UnaryOperator<Change> rejectChange = c -> {
// check if the change might effect the validating predicate
if (c.isContentChange()) {
// check if change is valid
if (c.getControlNewText().length() > len) {
// invalid change
// sugar: show a context menu with error message
final ContextMenu menu = new ContextMenu();
menu.getItems().add(new MenuItem("This field takes\n"+len+" characters only."));
menu.show(c.getControl(), Side.BOTTOM, 0, 0);
// return null to reject the change
return null;
}
}
// valid change: accept the change by returning it
return c;
};
field.setTextFormatter(new TextFormatter(rejectChange));

旁白:

Modifying the state of a sender虽然它通知其听众有关该状态的更改通常是一个坏主意,并且可能很容易导致意外且难以跟踪的副作用(我怀疑 - 虽然不知道 - 其他答案中提到的撤消错误是这样的副作用)

关于java - 如何使用 JavaFX TextField 最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538849/

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