Java 绑定双向
Java bindBidirectional
我有以下问题。我的任务是在我的数独字段对象和它在 GUI 中的图形形式之间创建一个双键。到目前为止,我已经设法想出了这样的事情。
TextField textField = new TextField();
JavaBeanIntegerPropertyBuilder builder = JavaBeanIntegerPropertyBuilder.create();
JavaBeanIntegerProperty test = builder.bean(board.getSudokuField(i,j))
.name("FieldValue").build();
StringConverter<Number> converter = new NumberStringConverter();
Bindings.bindBidirectional(textField.textProperty(), test, converter);
该解决方案有效,但如果您输入数字以外的任何字符,则会引发解析错误。
Caused by: java.text.ParseException: Unparseable number: "a"
这是改变债券类型的最佳方式吗?或添加有关输入值的条件,但我只是不知道该怎么做。
board.getSudokuField(i,j) return 数独字段对象。
还有 int getFieldValue() which return int 和 void setFieldValue(int value)
所以这是我的解决方案,输入到TextField中的数字只能是1到9之间的数字。
TextField textField = new TextField();
JavaBeanIntegerPropertyBuilder builder =
JavaBeanIntegerPropertyBuilder.create();
JavaBeanIntegerProperty test = builder.bean(board.getSudokuField(i,j))
.name("FieldValue").build();
StringConverter<Number> converter = new NumberStringConverter();
textField.setTextFormatter(new TextFormatter<>(c -> {
if (c.isContentChange()) {
if (c.getControlNewText().length() == 0) {
return c;
}
try {
Integer.parseInt(c.getControlNewText());
if (Integer.parseInt(c.getControlNewText()) > 9
|| Integer.parseInt(c.getControlNewText()) == 0) {
return null;
}
return c;
} catch (NumberFormatException ignored) {
ignored.getMessage();
}
return null;
}
return c;
}));
Bindings.bindBidirectional(textField.textProperty(), test, converter);
我有以下问题。我的任务是在我的数独字段对象和它在 GUI 中的图形形式之间创建一个双键。到目前为止,我已经设法想出了这样的事情。
TextField textField = new TextField();
JavaBeanIntegerPropertyBuilder builder = JavaBeanIntegerPropertyBuilder.create();
JavaBeanIntegerProperty test = builder.bean(board.getSudokuField(i,j))
.name("FieldValue").build();
StringConverter<Number> converter = new NumberStringConverter();
Bindings.bindBidirectional(textField.textProperty(), test, converter);
该解决方案有效,但如果您输入数字以外的任何字符,则会引发解析错误。
Caused by: java.text.ParseException: Unparseable number: "a"
这是改变债券类型的最佳方式吗?或添加有关输入值的条件,但我只是不知道该怎么做。 board.getSudokuField(i,j) return 数独字段对象。 还有 int getFieldValue() which return int 和 void setFieldValue(int value)
所以这是我的解决方案,输入到TextField中的数字只能是1到9之间的数字。
TextField textField = new TextField();
JavaBeanIntegerPropertyBuilder builder =
JavaBeanIntegerPropertyBuilder.create();
JavaBeanIntegerProperty test = builder.bean(board.getSudokuField(i,j))
.name("FieldValue").build();
StringConverter<Number> converter = new NumberStringConverter();
textField.setTextFormatter(new TextFormatter<>(c -> {
if (c.isContentChange()) {
if (c.getControlNewText().length() == 0) {
return c;
}
try {
Integer.parseInt(c.getControlNewText());
if (Integer.parseInt(c.getControlNewText()) > 9
|| Integer.parseInt(c.getControlNewText()) == 0) {
return null;
}
return c;
} catch (NumberFormatException ignored) {
ignored.getMessage();
}
return null;
}
return c;
}));
Bindings.bindBidirectional(textField.textProperty(), test, converter);