2016-06-24 60 views
1

假設我們有一個帶有3列(A,B,C)的簡單Tableview。每列包含一些目前不重要的數據。JavaFX TableView:選擇整個TableColumn並獲得索引

我想知道是否可以只選擇整個列(無論用戶在列中單擊的位置)並檢索用戶選擇的列的ID和/或索引?

例如,用戶單擊B列區域中的某處。在這種情況下,整個列應該被標記並且應該返回索引2。

任何幫助,將不勝感激;)

回答

1

你可以嘗試這樣的事情:

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的選擇模型的selectionModePropertySelectionMode.MULTIPLE以使TableView能夠選擇多行。

  • 設置TableViewtrue的選擇模型,使TableView能夠選擇單元格,而不是行

  • cellSelectionEnabledProperty附加一個監聽器TableViewfocus modelfocusedCellProperty其監聽打印TableColumn,並選擇所選列中的所有單元格

  • 如果修改鍵被按下,則在TableView上消耗鼠標事件ble例如Shift +點擊選擇

+0

哇......工作正常。你爲我節省了一整天的時間。只有一個問題:我將如何實現多列選擇。例如,當我點擊列C時選擇列A? – Tobias

相關問題