我有一些带有一些列的TableView。它具有多行选择支持。我想要的是获取所有选定的数据。
我知道如何获取单个选定的数据。
查看图片。我想要这3个选定的单元格数据。
控制器
/*********************
* TABLE ITEMS
*********************/
@FXML
private TableView<DailySalesTableData> table;
@FXML
private TableColumn<DailySalesTableData, String> dateColumn;
@FXML
private TableColumn<DailySalesTableData, String> nameColumn;
@FXML
private TableColumn<DailySalesTableData, String> addressColumn;
@FXML
private TableColumn<DailySalesTableData, String> productColumn;
@FXML
private TableColumn<DailySalesTableData, Double> quantityColumn;
@FXML
private TableColumn<DailySalesTableData, Double> priceColumn;
@FXML
private TableColumn<DailySalesTableData, Double> totalColumn;
@FXML
private TableColumn<DailySalesTableData, Double> depositColumn;
@FXML
private TableColumn<DailySalesTableData, Double> restColumn;
@FXML
private TableColumn<DailySalesTableData, String> checkColumn;
@FXML
private TableColumn<DailySalesTableData, Integer> transColumn;
private ObservableList<DailySalesTableData> tableData = FXCollections.observableArrayList();
@Override
public void initialize(URL arg0, ResourceBundle arg1){
dateColumn.setCellValueFactory(cellData->new ReadOnlyStringWrapper(cellData.getValue().getdate()));
nameColumn.setCellValueFactory(cellData->new ReadOnlyStringWrapper(cellData.getValue().getName()));
addressColumn.setCellValueFactory(cellData->new ReadOnlyStringWrapper(cellData.getValue().getAddress()));
productColumn.setCellValueFactory(cellData->new ReadOnlyStringWrapper(cellData.getValue().getProduct()));
quantityColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Double>(cellData.getValue().getQuantity()));
priceColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Double>(cellData.getValue().getRate()));
totalColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Double>(cellData.getValue().getTotalPrice()));
depositColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Double>(cellData.getValue().getDeposit()));
restColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Double>(cellData.getValue().getRest()));
transColumn.setCellValueFactory(cellData->new ReadOnlyObjectWrapper<Integer>(cellData.getValue().getTrans()));
checkColumn.setCellValueFactory(cellData->new ReadOnlyStringWrapper(cellData.getValue().getStatus()));
table.setItems(getPersonData());
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().setCellSelectionEnabled(true);
}
public ObservableList<DailySalesTableData> getPersonData() {
return tableData;
}
怎么做?
答案 0 :(得分:2)
您可以获取表格中所有位置的列表,这些位置由选择模型中的(名称相当严重的)>> crabs = tbl(tbl(:, 2)==1, 1)
方法选择。这会返回一个getSelectedCells()
个对象的列表(因此调用它TablePosition
或其他一些对象会更有意义,但无论如何......);您可以从每个表中获取表列(作为带有getSelectedPositions()
的{{1}}对象或带有TableColumn
的索引,并将行作为索引{{1} }。
获取数据仍然有点棘手。在您的示例中,您的列包含多种数据类型(getTableColumn()
,getColumn()
和getRow()
列),当然您可以选择任意单元格的任意集合。所以你可以编写类似这样的代码:
String
显然,这有点笨拙,但实际上是以良好的类型安全方式做到这一点的唯一方法。
您可以通过以下方式减少代码,但需要知道数据类型:
Double