基本上我有四个2D矩阵,我希望将它们插入到单独的tableview中。范围是动态的,列应序列化为{1,2,3 ..etc}
我正在尝试为插入创建一个函数,但除了定义固定长度并且仅使用所需范围之外,我找不到其他方法。
int rowLen, colLen = textfield_input;
double[][] Ci = new double[rowLen][colLen];
double[][] ThetaP = new double[rowLen][colLen];
double[][] ThetaT= new double[rowLen][colLen];
double[][] Re = new double[rowLen][colLen];
void printMatrix(TableView target, double[][] source) {
}
答案 0 :(得分:1)
使您的表格为TableView<double[]>
(因此每行由double[]
表示),并根据行的大小创建表格列。
如果您可以假设您的数组是矩形的(即source[i].length
对于所有i
都相同),您可以这样做:
void printMatrix(TableView<double[]> target, double[][] source) {
target.getColumns().clear();
target.getItems().clear();
int numRows = source.length ;
if (numRows == 0) return ;
int numCols = source[0].length ;
for (int i = 0 ; i < numCols ; i++) {
TableColumn<double[], Number> column = new TableColumn<>("Column "+i);
final int columnIndex = i ;
column.setCellValueFactory(cellData -> {
double[] row = cellData.getValue();
return new SimpleDoubleProperty(row[columnIndex]);
});
target.getColumns().add(column);
}
for (int i = 0 ; i < numRows ; i++) {
target.getItems().add(source[i]);
}
}
如果数组可能不是矩形,则可以随意添加其他列。您需要注意确保不要将任何组成行的数组编入索引:
void printMatrix(TableView<double[]> target, double[][] source) {
target.getColumns().clear();
target.getItems().clear();
int numRows = source.length ;
for (int rowIndex = 0 ; rowIndex < numRows ; rowIndex++) {
for (int i = target.getColumns().size(); i < source[rowIndex].length ; i++) {
TableColumn<double[], Number> column = new TableColumn<>("Column "+i);
final int columnIndex = i ;
column.setCellValueFactory(cellData -> {
double[] row = cellData.getValue();
double value ;
if (row.length <= columnIndex) {
value = 0 ;
} else {
value = row[columnIndex] ;
}
return new SimpleDoubleProperty(value);
});
target.getColumns().add(column);
}
target.getItems().add(source[rowIndex]);
}
}