JavaFX TableView选中行时,可换行单元格文本颜色修改问题
JavaFX TableView列文本换行与选中行文本颜色同步问题
我在JavaFX TableView的某一列实现文本换行功能时遇到了问题:该列默认文本颜色为黑色,其他列选中行时文本颜色会自动改变,但此列不会。希望选中行时该列文本颜色也能同步变化。
我的代码如下:
addressCol.setCellFactory(tc -> { TableCell<Customer, String> cell = new TableCell<>(); Text text = new Text(); text.setStyle("-fx-text-alignment: CENTER;"); cell.setGraphic(text); cell.setPrefHeight(Control.USE_COMPUTED_SIZE); text.wrappingWidthProperty().bind(addressCol.widthProperty()); text.textProperty().bind(cell.itemProperty()); return cell ; });
解决方法
问题出在你直接使用Text作为单元格的graphic,但没有将Text的颜色与单元格的选中状态关联。TableCell在选中时会自动更新自身的textFill属性,只需把Text的fill属性绑定到单元格的textFill属性即可实现颜色同步。
修改后的代码:
addressCol.setCellFactory(tc -> { TableCell<Customer, String> cell = new TableCell<>(); Text text = new Text(); text.setStyle("-fx-text-alignment: CENTER;"); // 绑定Text的颜色到单元格的textFill属性 text.fillProperty().bind(cell.textFillProperty()); cell.setGraphic(text); cell.setPrefHeight(Control.USE_COMPUTED_SIZE); text.wrappingWidthProperty().bind(addressCol.widthProperty()); text.textProperty().bind(cell.itemProperty()); return cell ; });
原理说明
- TableCell的
textFill属性会根据单元格的选中状态(selectedProperty)自动切换颜色(比如默认选中时为白色,未选中时为黑色)。 - 通过
text.fillProperty().bind(cell.textFillProperty()),让Text的颜色跟随TableCell的textFill变化,这样选中行时文本颜色就会和其他列保持一致。
内容的提问来源于stack exchange,提问作者Mayur Patel
相关产品推荐
相关产品推荐

