java - 如何更新 javafx TableView 值

标签 java swing javafx tableview

作为一名 Swing 程序员,我不敢相信这这么难,但显然确实如此。

我有一个 javafx TableView,我想更改模型的一个值并正确更新屏幕。

出于多种原因,我不想使用 SimpleStringProperty 及其同类。一是我想使用 POJO。另一个是我的数据元素不是字符串!! (它们也不是像整数这样的简单数据类型)。所以使用这些是不可能的。

我也不想知道任何像隐藏和取消隐藏列之类的黑客行为以及任何类似的废话。我想知道正确的方法(™)来做到这一点,我会为其他人留下技巧。

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

}

您可以从 this gist 获取完整代码。它可能会让您了解如何解决此问题。

关于 POJO:您必须使用属性。对于其他类型,请使用适当的类型,DoubleProperty、ObjectProperty 等。

而且它是可观察的,一旦你改变了数据,tableview就会更新。

关于java - 如何更新 javafx TableView 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31065967/

相关文章:

java - GUI 中的 JButton

JavaFX Scenebuilder从数据库填充listView

java - 将同步方法调用转换为异步方法调用的最佳方法是什么?

java - 将 ConcurrentHashMap 转换为 Java 中的排序列表

Java 自定义字体在 html jlabels 中不起作用

java - 核心 Java 应用程序中的安全身份验证和授权

java - 在 javaFXML 文件中键入以使用 GmapsFX

JavaFX 和 SVG : drawing a line

java - 如何确定 DynamoDB Java SDK 中的索引数据类型

java - 可以 :select submit palette values in Tapestry 5. 3.6 吗?