我们可以在javafx中更改Tableview中的单元格位置时重新排序sr.no吗?

时间:2016-10-13 13:22:41

标签: javafx

enter image description here

我想这样做

如果单元格位置发生变化,序列号将在更改位置时自行顺序重新排序。我们可以在更改单元格位置时...序列中没有列会自行重新排序..在TABLEVIEW < / p>

例如..假设der为五行( Fieldname :F1为 Sr.no :1,F2为2,F3为3,F4为4, F5为5)如果f1在单击向下按钮时移动到第二位,则f1 srno将变为2,并且在移动单元格后f2将动态为1 ..

或者如果f5在点击向上按钮时移动到向上位置,那么f5的srno将变为4并且f4 srno将变为5 ..

请为我提供一个逻辑吗?

我的代码:

ReadOnlyIntegerProperty selectedIndex = tableupdateSpacee.getSelectionModel().selectedIndexProperty();

    upaction.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent evt) {
                int index = tableupdateSpacee.getSelectionModel().getSelectedIndex();
                // swap items
                tableupdateSpacee.getItems().add(index-1, tableupdateSpacee.getItems().remove(index));
                // select item at new position
                tableupdateSpacee.getSelectionModel().clearAndSelect(index-1);
                int a=colFieldSrno.getCellData(index);
                colFieldSrno.setCellValueFactory(new PropertyValueFactory<>("srno"));
                System.out.println("col serial number"+colFieldSrno.getCellData(index));

              //  tableupdateSpacee.getColumns().add(colFieldSrno.getCellData(index));




                tableupdateSpacee.setItems(modelUpdateSpace);
                tableupdateSpacee.refresh();
            }
        });

    downaction.setOnAction(evt -> {
        int index = tableupdateSpacee.getSelectionModel().getSelectedIndex();
        // swap items
        tableupdateSpacee.getItems().add(index+1, tableupdateSpacee.getItems().remove(index));
        // select item at new position
        tableupdateSpacee.getSelectionModel().clearAndSelect(index+1);


        tableupdateSpacee.refresh();
    });

1 个答案:

答案 0 :(得分:1)

您可以在表模型中完全没有srNo属性的情况下执行此操作。只是做:

TableColumn<S,Void> colFieldSrno = new TableColumn<>("Sr.No");
colFieldSrNo.setCellFactory(tc -> new TableCell<S,Void>() {
    @Override
    public void updateIndex(int index) {
        super.updateIndex(index);
        if (index < 0 || index >= tableupdateSpacee.getItems().size()) {
            setText(null);
        } else {
            setText(Integer.toString(index+1));
        }
    }
});

(这里您需要将S替换为您用作表格模型的任何类别。完全删除列的cellValueFactory(值基本上是索引,它不是表模型的一部分),并从表模型中删除srNo属性。

如果由于其他原因需要srNo属性(虽然你根本不需要它),那么你只需要在交换值时更新它:

upaction.setOnAction(new EventHandler<ActionEvent>() {

    @Override
    public void handle(ActionEvent evt) {
        int index = tableupdateSpacee.getSelectionModel().getSelectedIndex();
        // swap items

        S item = tableupdateSpacee.getItems().get(index);
        S previousItem = tableUpdateSpacee.getItems().get(index - 1);
        previousItem.setSrNo(index);
        item.setSrNo(index-1);
        tableupdateSpacee.getItems().remove(index);
        tableupdateSpacee.getItems().add(index-1, item);
        // select item at new position
        tableupdateSpacee.getSelectionModel().clearAndSelect(index-1);
    }
});

,同样适用于downaction