gpt4 book ai didi

带有空文本的 JavaFX TextFormatter 问题

转载 作者:行者123 更新时间:2023-12-05 05:21:16 27 4
gpt4 key购买 nike

我遇到了 JavaFX textformatter 的问题。我想知道是我做错了什么还是 Java JDK 中有错误。

这是显示问题的代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class TestApp extends Application {
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {
TextField field = new TextField("test0");
field.setTextFormatter(new TestTextFormatter());
Button btn = new Button();
btn.setText("Test");
btn.setOnAction(e -> {
field.setText(null);
field.setText("test");
});
BorderPane root = new BorderPane();
root.setTop(btn);
root.setCenter(field);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
class TestTextFormatter extends TextFormatter<String> {
public TestTextFormatter() {
super(c -> {
System.out.println("newControlText=" + c.getControlNewText());
return c;
});
}
}
}

点击按钮几次。第一次按预期工作输出是:新控件文本=test0新控件文本=newControlText=测试

第二次和接下来的每一次尝试都会导致异常:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: The start must be <= the end
at javafx.scene.control.TextInputControl.getText(TextInputControl.java:446)
at javafx.scene.control.TextInputControl$TextInputControlFromatterAccessor.getText(TextInputControl.java:1609)
at javafx.scene.control.TextFormatter$Change.getControlNewText(TextFormatter.java:453)
at TestApp$TestTextFormatter.lambda$0(TestApp.java:34)
at javafx.scene.control.TextInputControl.filterAndSet(TextInputControl.java:1165)
at javafx.scene.control.TextInputControl.access$900(TextInputControl.java:79)
at javafx.scene.control.TextInputControl$TextProperty.doSet(TextInputControl.java:1410)
at javafx.scene.control.TextInputControl$TextProperty.set(TextInputControl.java:1323)
at javafx.scene.control.TextInputControl.setText(TextInputControl.java:349)
at TestApp.lambda$0(TestApp.java:21)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
...

能否请您帮助我了解问题出在哪里(我的代码或 JDK)?

最佳答案

请看这个答案https://stackoverflow.com/a/32893573/814304

您正在尝试更改事件内的文本,但您不应该这么做。

关于带有空文本的 JavaFX TextFormatter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218790/

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