JavaFX TableView:Select 整个 TableColumn 并获取索引

JavaFX TableView: Select the whole TableColumn and get the index

假设我们有一个包含 3 列(A、B、C)的简单 Tableview。每个 Column 包含一些目前不重要的数据。

我想知道是否可以只选择整个列(无论用户在列中的何处单击)并检索用户选择的该列的 ID and/or 索引?

例如,用户点击 B 列区域的某处。在这种情况下,应标记整个列并返回索引 2。

如有任何帮助,我们将不胜感激 ;)

您可以尝试这样的操作:

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

table.addEventFilter(MouseEvent.MOUSE_PRESSED, (event) -> {
    if(event.isShortcutDown() || event.isShiftDown())
        event.consume();
});


table.getFocusModel().focusedCellProperty().addListener((obs, oldVal, newVal) -> {

    if(newVal.getTableColumn() != null){
        table.getSelectionModel().selectRange(0, newVal.getTableColumn(), table.getItems().size(), newVal.getTableColumn());
        System.out.println("Selected TableColumn: "+ newVal.getTableColumn().getText());
        System.out.println("Selected column index: "+ newVal.getColumn());
    }
});

table.addEventFilter(MouseEvent.MOUSE_PRESSED, (event) -> {
    if(event.isShortcutDown() || event.isShiftDown())
        event.consume();
});

这个片段:

  • TableView的select离子模型的selectionModeProperty设置为SelectionMode.MULTIPLE以使TableView能够select不止一行。

  • TableView 的 select 离子模型的 cellSelectionEnabledProperty 设置为 true 以使 TableView 能够select 个单元格而不是行

  • 将侦听器附加到 TableViewfocusedCellProperty of the focus model,该侦听器打印当前 selected 单元格的 TableColumn 和 selects selected 列中的所有单元格

  • 消耗 TableView 上的鼠标事件,如果按下修改键以禁用例如 Shift + Click selection