[英]How to update javafx TableView values
作為Swing程序員,我不敢相信這是如此困難,但顯然如此。
我有一個javafx TableView,我想更改模型的值之一並正確更新屏幕。
由於多種原因,我不想使用SimpleStringProperty及其類似功能。 一種是我要使用POJO。 另一個是我的數據元素不是字符串! (它們也不是像Integers這樣的簡單數據類型)。 因此使用這些是不可能的。
我也不想知道任何隱藏和取消隱藏列之類的技巧,以及類似的廢話。 我想知道正確的方法來做到這一點,我會把hacks留給別人。
在Swing中完成此操作的方法當然很簡單。 您將調用model.fireTableRowsUpdated(index,index);
我能感覺得出你。 在應用程序中,表是最常見的事物,並且在JavaFX中實現表的方式最令人尷尬(焦點錯誤(當您更改單元格時丟失數據的焦點錯誤仍未解決)),並且在現實環境中絕對無法使用。 難怪他們將其稱為TableVIEW,因為您幾乎無法做任何其他事情。
我試圖實現一個簡單的復制/粘貼功能,您可以將一個單元格的內容復制到另一個單元格。 這並不容易。 但是,我以獲取單元格屬性並調用set方法的方式解決了它。
摘抄:
if( observableValue instanceof DoubleProperty) {
try {
double value = numberFormatter.parse(clipboardCellContent).doubleValue();
((DoubleProperty) observableValue).set(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
else if( observableValue instanceof IntegerProperty) {
try {
int value = NumberFormat.getInstance().parse(clipboardCellContent).intValue();
((IntegerProperty) observableValue).set(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
else if( observableValue instanceof StringProperty) {
((StringProperty) observableValue).set(clipboardCellContent);
} else {
System.out.println("Unsupported observable value: " + observableValue);
}
您可以從這個要點中獲取完整的代碼。 它可能會給您一個想法,如何解決此問題。
關於POJO:您必須使用屬性。 對於其他類型,請使用適當的類型,DoubleProperty,ObjectProperty等。
而且可以觀察到,一旦您更改了數據,表視圖就會更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.