我遇到JavaFX文本格式化程序的问题。我想知道是我做错了什么,还是JavaJDK有错误。
以下是显示问题的代码:
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;
});
}
}
}
单击按钮几次。第一次按预期工作输出是:newControlText=test0 newControlText=newControlText=test
第二次和每一次尝试都会导致异常:
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)?
它是一个过滤器,在应用方法时引发异常。
如果您的代码允许设置null值,那么您应该按照以下方式重写TestTextFormatter类
class TestTextFormatter extends TextFormatter<String> {
public TestTextFormatter() {
super(c -> {
if ( ((TextField)c.getControl()).getText() == null ) {
return c;
}
System.out.println("newControlText=" + c.getControlNewText());
return c;
});
}
}
请看这个答案https://stackoverflow.com/a/32893573/814304
您正在尝试更改事件中的文本,这正是您不应该做的。
我已经建立了一个网站,从摄像头读取条形码。我可以捕获条形码文本并将其打印到P元素,如下所示。但我想在文本框中看到它。这可能吗?在文本框的值处看不到条形码。
问题内容: 我有一组Books对象, Book 类定义如下: 当 标题 是书,例如标题: JavaScript来假人 。 和 taglist 是我们示例的标签列表: Javascript,jquery,“ web dev”,.. 正如我所说,有一本书谈论不同的事物:IT,生物学,历史……每本书都有一个标题和一组描述它的标签。 我必须按主题自动将这些书分类为单独的集合,例如: 书: 傻瓜Java 假
主要内容:案例1:属性有特殊字符的文件,案例2:有特殊字符的属性文件(编码),Struts2..哪里有问题?,解决办法,回答之前的问题,参考一个 Struts2 的国际化定位的问题,用来显示中国汉字... 案例1:属性有特殊字符的文件 属性文件存储用户名,密码信息,并以中文字符提交。此属性文件以UTF-8格式创建的,但内容不使用 native2ascii 编码。 让我们试着通过一些UI标签,来显示中国汉字。查看页面声明为UTF-8格式的HTML元标记来显示。 结果 令人惊奇的是,以下三个UI标签
我使用Netbeans创建了一个GUI,它要求用户在文本字段和文本区域中输入内容。当我试图在其他类中使用它时,当我对其使用getText方法时,在文本字段中输入的文本不会出现。取而代之的是,在使用Netbeans中的编辑文本选项指定的文本字段中出现的文本,每当使用getText方法时都会出现。问题是否与某种排序或顺序有关?因为我相信GUI中的文本是在用户实际输入之前被引用的。
我有下面的代码来刮一个页面,https://www.hotukdeals.com 由于某种原因,这种方法起作用,在循环中刮取交易的价格一定的次数,然后停止工作。 程序输出: 从输出中可以看到,在前四行之后,属性为空,但元素中有文本。 有人知道这事吗?有什么想法或解决办法吗?
我正在使用iText7复制pdf页面,并对这些页面进行编号。所以我不需要手动给它们编号。但是生成的pdf文件中的数字有问题。下面是它的样子: 我想了好几个小时,还是想不出来。 我的代码: