簡體   English   中英

如何更新JavaFX TableView值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM