Vog*_*612 3 css java javafx css-selectors
我在场景中有一些TableView,我想要突出显示所选的单元格.根据JavaFX CSS参考,:selected在Cells上有一个伪类,所以我尝试了以下css:
.cell:selected {
-fx-effect: dropshadow(gaussian, 10, .2, 4, 4);
}
Run Code Online (Sandbox Code Playgroud)
但风格不适用于细胞.当我使用.cell:hover它时按预期工作.
以下是简化的FXML:
<Pane fx:controller="Controller">
<children>
<TableView fx:id="table" />
</children>
</Pane>
Run Code Online (Sandbox Code Playgroud)
我正在使用它作为控制器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么CSS不能应用于选定的单元格?
这里的问题是JavaFX处理单元格和行的选择的方式.
我们TableViewSelectionModel暂时咨询一下javadoc ,特别是cellSelectionEnabled属性:
一个布尔属性,用于表示表是处于行还是单元格选择模式.默认情况下,表处于行选择模式,这意味着无法选择单个单元格.设置
cellSelectionEnabled为true会导致单元格被选中(但不能被选中).
我们可以得出结论,您的单元格未标记为已选中,因为您处于行选择模式.
你可以通过调整你的css选择器来依赖行(这样的事情)来解决这个问题:
.table-row-cell:selected .cell {
-fx-effect: ...;
}
Run Code Online (Sandbox Code Playgroud)
与TableView 结合使用时:cell-selection,您可以使它更有用:row-selection:
.table-view:row-selection .table-row-cell:selected .cell, .table-view:cell-selection .cell:selected {
-fx-effect: ...;
}
Run Code Online (Sandbox Code Playgroud)
将适用于选定的单元格,无论您的操作方式如何 TableViewSelectionModel