2016-04-17 68 views
3

我在場景中有一些TableView,我想突出顯示選定的單元格。按照JavaFX CSS reference,對細胞僞類:selected,所以我嘗試了下面的CSS::選定的僞類型風格不適用於單元格

.cell:selected { 
    -fx-effect: dropshadow(gaussian, 10, .2, 4, 4); 
} 

但風格不會應用到單元格。當我使用.cell:hover時,它按預期工作。

下面是一個簡化FXML:

<Pane fx:controller="Controller"> 
    <children> 
     <TableView fx:id="table" /> 
    </children> 
</Pane> 

我用這個作爲控制器:

public class Controller implements Initializable{ 
    @FXML 
    private TableView<SomeClass> table; 
    // some other things 

    @Override 
    public void initialize(URL url, ResourceBundle bundle) { 
     Objects.requireNonNull(table, "Table was not injected"); 
     // create columns, initialize other stuff 
     table.getColumns().clear(); 
     table.getColumns().addAll(/*some columns */); 
     table.setEditable(false); 
     table.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); 
     table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
    } 
} 

爲什麼在CSS中不能應用到所選單元格?

回答

6

這裏的問題是JavaFX處理單元和行選擇的方式。

讓我們請教TableViewSelectionModel的Javadoc了一會兒,尤其是cellSelectionEnabled屬性:

用於表示該表是否爲行或單元選擇模式的布爾屬性。默認情況下,表格處於行選擇模式,這意味着不能選擇單個單元格。將cellSelectionEnabled設置爲true會導致單元格被選中(但不是行)。

我們可以得出結論,您的單元格未被標記爲選中狀態,因爲您處於行選模式。
您可以解決此通過調整你的CSS選擇器依賴於行(像這樣):

.table-row-cell:selected .cell { 
    -fx-effect: ...; 
} 

您可以在TableView中與:cell-selection:row-selection使這個更加有用的組合:

.table-view:row-selection .table-row-cell:selected .cell, .table-view:cell-selection .cell:selected { 
    -fx-effect: ...; 
} 

適用於選定的單元格,不管您的操作方式如何TableViewSelectionModel