我有以下問題。我的任務是在我的數獨欄位物件和它在 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);
該解決方案有效,但如果您輸入除數字以外的任何字符,則會引發決議錯誤。
引起:java.text.ParseException:無法決議的數字:“a”
這是以某種方式改變債券型別的最佳方法嗎?或添加有關輸入值的條件,但我只是不知道該怎么做。board.getSudokuField(i,j) 回傳 SudokuField 物件。還有 int getFieldValue() 回傳 int 和 void setFieldValue(int value)
uj5u.com熱心網友回復:
所以這是我的解決方案,輸入到 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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/407099.html
標籤:
上一篇:BoxLayout內的Kivy嵌套ScreenManager
下一篇:對話框在動作條件下不起作用
