【问题标题】:How to delete row from table column javafx如何从表列javafx中删除行
【发布时间】:2016-04-23 18:12:24
【问题描述】:

这些是我的表格列 课程说明。如果单击一行(该行变为“活动”/突出显示),并且他们按下 Delete 按钮,它应该删除该行,我该怎么做?

我的 Course 列的代码:(以及我应该向 delete 按钮添加什么事件侦听器?)

@SuppressWarnings("rawtypes")
TableColumn courseCol = new TableColumn("Course");
courseCol.setMinWidth(300);
courseCol.setCellValueFactory(new PropertyValueFactory<Courses, String>("firstName"));

final Button deleteButton = new Button("Delete");

deleteButton.setOnAction(.....

【问题讨论】:

  • 顺便说一句:不要抑制原始类型:为表格列和表格视图使用正确的类型。

标签: java javafx tablecolumn


【解决方案1】:

只需从表格视图的项目列表中删除所选项目。如果你有

TableView<MyDataType> table = new TableView<>();

那你就做

deleteButton.setOnAction(e -> {
    MyDataType selectedItem = table.getSelectionModel().getSelectedItem();
    table.getItems().remove(selectedItem);
});

【讨论】:

    【解决方案2】:

    如果有人想一次删除多行,接受类似的解决方案:

    首先我们需要更改表格中的 SelectionMethod 以允许多选:

    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    

    在此之后,我们需要用这样的代码为按钮设置动作:

    ObservableList<SomeField> selectedRows = table.getSelectionModel().getSelectedItems();
    // we don't want to iterate on same collection on with we remove items
    ArrayList<SomeField> rows = new ArrayList<>(selectedRows);
    rows.forEach(row -> table.getItems().remove(row));
    

    我们可以调用 removeAll 方法而不是 remove(也无需创建新集合),但这样的解决方案不仅会删除选定的项目,还会删除它们的重复项(如果它们存在但未被选中)。如果您不允许在表中重复,您可以简单地以 selectedRows 作为参数调用 removeAll。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2014-04-29
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多