将tableview javafx值转换为double

我对JavaFX感到非常生锈,这个问题困扰了我几天。我可以使用 gembox.spreadsheet API将excel文件加载到TableView中,也可以编辑这些值。我得到了类似enter image description here的内容。我想要的是将整个TableView的内容放入double的2D数组中以进行进一步的计算。 我尝试了类似以下的方法,该方法构建良好,但是在运行时会出现java.lang.NullPointException错误。

double [][] offset = new double[OffsetTable.getItems().size()][];

for(int row = 0; row < OffsetTable.getItems().size(); row++) {
    ObservableList cells =(ObservableList) OffsetTable.getItems().get(row);
    for(int column = 0; column < cells.size(); column++) {
        offset[row][column]= Double.parseDouble(cells.get(column).toString());
    }
}
iCMS 回答:将tableview javafx值转换为double

在Java中,二维数组实际上是数组的数组。您实例化了数组offset,但从未实例化它包含的单个数组。

因此,当您尝试分配给数组column的元素offset[row]时,

offset[row][column] = ... ;

您得到一个NullPointerException,因为offset[row]尚未初始化,但仍为null

您需要做类似的事情

double[][] offset = new double[offsetTable.getItems().size()][];

for(int row = 0; row < offsetTable.getItems().size(); row++) {
    ObservableList cells =(ObservableList) offsetTable.getItems().get(row);
    offset[row] = new double[cells.size()];
    for(int column = 0; column < cells.size(); column++) {
        offset[row][column]= Double.parseDouble(cells.get(column).toString());
    }
}

请注意,您的TableView似乎设置不正确。您永远不要使用原始类型(ObservableList),而且我也看不出有理由使TableView本身的行可观察。另外,要填充数组,您需要将表中的值转换为String,然后将String解析为双精度数,这充其量是效率极低但容易出错的事情。

因此,您可能应该使用TableView<ObservableList>之类的东西,而不是TableView<List<Double>>,以便您可以这样做

double[][] offset = new double[offsetTable.getItems().size()][];

for(int rowIndex = 0; rowIndex < offsetTable.getItems().size(); rowIndex++) {
    List<Double> row = offsetTable.getItems().get(rowIndex);
    offset[rowIndex] = new double[row.size()];
    for(int column = 0; column < row.size(); column++) {
        offset[row][column]= row.get(column);
    }
}

实际上,使用此设置,甚至还不清楚是否需要转换为数组,因为您可以随时替换

offset[row][column]

使用

offsetTable.getItems().get(row).get(column)

任何时候您需要访问表中的数据。

本文链接:https://www.f2er.com/2037103.html

大家都在问