3
我想創建JavaFX中可編輯的TableView,顯示存儲在一個自定義類InventoryLocation各種值。其中一些值是字符串,而另一些則是各種數字數據類型(short,int,double),並且一些字符串具有與它們相關聯的特定所需格式。我使用類似下面的代碼塊來定義每個表列,使用SortStringConverter()或類似採取文字輸入,並將其轉換爲目標數據類型:可編輯的TableView JavaFX中,只有數字輸入
TableColumn<InventoryLocation,Short> CabinetColumn = new TableColumn<>("Cabinet");
CabinetColumn.setMinWidth(50);
CabinetColumn.setCellValueFactory(new PropertyValueFactory<>("Cabinet"));
CabinetColumn.setCellFactory(TextFieldTableCell.forTableColumn(new ShortStringConverter()));
不過,我想阻止用戶輸入任何無效的數據開始。對於上面的例子,他們不應該能夠輸入任何非數字字符。在其他地方我的應用程序,在簡單的TextField,我使用這樣的事情來執行正則表達式匹配用戶輸入:
quantity.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (!newValue.matches("\\d*")) {
quantity.setText(newValue.replaceAll("[^\\d]", ""));
}
}
});
如何申請類似於可編輯的TableView用於文本輸入的東西嗎?目前,第一個代碼塊將允許用戶編寫他們喜歡的任何值,並且如果該字符串不能被轉換爲short,則會拋出數字格式異常。我希望代碼能夠防止他們首先輸入無效值。
請參閱此相關的問題:什麼是推薦的方式,使在JavaFX的數字文本字段?](https://開頭stackoverflow.com/questions/7555564/what-is-the-recommended-way-to-make-a-numeric-textfield-in-javafx)。注意這是在Java中加入引用該答案[的TextFormatter](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextFormatter.html),8。 – jewelsea
解決方案可能會是將TextFormatter應用於由TextFieldTableCell創建的TextField。不幸的是,這些文本框是私有的那類,所以也許嘗試複製和粘貼TextFieldTableCell的代碼來創建一個新的類FormattedTextFieldTableCell,使您可以設置所生成的文本字段適當的文本格式化。 – jewelsea