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);