微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用多个 TableView 获取选定的 TableView

如何解决如何使用多个 TableView 获取选定的 TableView

我正在使用 javafx 构建时间表,并且我使用了 5 个 TableView,每个 TableView 用于一周中的一天(周一至周五)。 我想从带有按钮的 TableView 中删除一个项目。 从一个特定的 TableView 中删除一个项目对我来说没有问题。但我希望该按钮适用于所有 TableView。

所以我的问题是:有没有一种方法可以获取选定的 TableView? 不仅仅是从一个 TableView 中选择的 Item。

@FXML public void fachLoeschen() {
    TableView<Fach> tableview = new TableView<Fach>();
    //tableview = the TableView in which the selected Item is
        
    int selectedIdx = tableview.getSelectionModel().getSelectedindex();
    if (selectedIdx==-1)return;
    Fach fach = tableview.getSelectionModel().getSelectedItem();
    var alert = new Alert(Alert.AlertType.CONFIRMATION,"Are you sure you want to delete: "+fach.getFach()+ " ?",ButtonType.YES,ButtonType.NO);
    if (alert.showAndWait().orElse(ButtonType.NO) == ButtonType.YES) tableview.getItems().remove(selectedIdx);
}

这是方法代码。 “fach”(我是德语)这个词代表时间表中的课程。

解决方法

您可以跟踪哪个表视图最后获得焦点:

private TableView<Fach> currentFocusedTable ;

// ...
public void initialize() {

    // existing code...

    for (TableView<Fach> table : listOfAllTables) {
        table.focusedProperty().addListener((obs,wasFocused,isNowFocused) -> {
            if (isNowFocused) {
                currentFocusedTable = table ;
            }
        });
    }

}

然后:

@FXML public void fachLoeschen() {

    if(currentFocusedTable == null) return ;

    int selectedIdx = currentFocusedTable.getSelectionModel().getSelectedIndex();
    if (selectedIdx==-1)return;
    Fach fach = currentFocusedTable.getSelectionModel().getSelectedItem();
    var alert = new Alert(Alert.AlertType.CONFIRMATION,"Are you sure you want to delete: "+fach.getFach()+ " ?",ButtonType.YES,ButtonType.NO);
    if (alert.showAndWait().orElse(ButtonType.NO) == ButtonType.YES) currentFocusedTable.getItems().remove(selectedIdx);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。