在 JAVAFX 中切换 Tableview 中的单元格位置

use*_*085 2 javafx tableview

是否可以TableView在 javafx.a 中切换行位置?

假设我创建了 5 行,并且有两个按钮“UP”和“DOWN”。单击向上按钮,用户可以将特定选定的行向上交换,对于向下按钮,用户可以通过单击向下按钮将行移动到向下位置;即用户可以TableView使用Button点击将特定选定行放置到任何位置。这有可能在TableView使用JavaFX?如果可能的话,请为我提供一个逻辑来做到这一点。

fab*_*ian 5

你可以简单地修改itemsTableView达到这样的效果:

@Override
public void start(Stage primaryStage) {
    TableView<Item<String>> tableView = createTableView();

    Button upButton = new Button("Up");
    Button downButton = new Button("Down");

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

    upButton.disableProperty().bind(selectedIndex.lessThanOrEqualTo(0));
    downButton.disableProperty().bind(Bindings.createBooleanBinding(() -> {
        int index = selectedIndex.get();
        return index < 0 || index+1 >= tableView.getItems().size();
    }, selectedIndex, tableView.getItems()));

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

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

    BorderPane root = new BorderPane(tableView);
    root.setRight(new VBox(10, upButton, downButton));

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)