【问题标题】:How to get the selected TableView using multiple TableViews如何使用多个 TableView 获取选定的 TableView
【发布时间】:2021-04-16 15:56:59
【问题描述】:

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

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

@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”(我是德国人)代表时间表中的课程。

【问题讨论】:

  • 我不确定这是你需要的还是你正在寻找的,但你有没有试过看看哪个有焦点?
  • 不,没有“选择”节点的一般概念(focused 可能接近,但不一定)。应用程序代码必须根据域范围来设计/实现它 - 这里是 f.i. current == Monday - 并始终与 ui 状态保持同步。

标签: java uitableview javafx tableview


【解决方案1】:

您可以跟踪上次获得焦点的表格视图:

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);
}

【讨论】:

  • 嗯,是的,嗯.. 可能,但更像是解决问题的 Y 部分的方法,不是吗;) X 似乎是在 OP 的上下文建模中缺少“选择”的概念(框架无法提供,但必须由应用程序代码设计/实现):可以想象与“mostRecentlyFocused”相关,但两者不一定总是相同的。只是说.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2016-06-28
  • 2012-03-07
  • 1970-01-01
  • 2013-06-27
  • 2020-12-20
相关资源
最近更新 更多