JAVAFX:TableView获取多个选择数据

时间:2016-01-31 22:03:36

标签: javafx javafx-8

我有一些带有一些列的TableView。它具有多行选择支持。我想要的是获取所有选定的数据。

我知道如何获取单个选定的数据。

enter image description here

查看图片。我想要这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;
    }

怎么做?

1 个答案:

答案 0 :(得分:2)

您可以获取表格中所有位置的列表,这些位置由选择模型中的(名称相当严重的)>> crabs = tbl(tbl(:, 2)==1, 1) 方法选择。这会返回一个getSelectedCells()个对象的列表(因此调用它TablePosition或其他一些对象会更有意义,但无论如何......);您可以从每个表中获取表列(作为带有getSelectedPositions()的{​​{1}}对象或带有TableColumn的索引,并将行作为索引{{1} }。

获取数据仍然有点棘手。在您的示例中,您的列包含多种数据类型(getTableColumn()getColumn()getRow()列),当然您可以选择任意单元格的任意集合。所以你可以编写类似这样的代码:

String
显然,这有点笨拙,但实际上是以良好的类型安全方式做到这一点的唯一方法。

您可以通过以下方式减少代码,但需要知道数据类型:

Double