所以我有以下问题。 我有一个JavaFX TableView,其中所有单元格都具有相同的样式,但只有一种。对于那一个单元格,我想删除所有样式,但是我猜RowFactory有一定的优先级。
我有类似的代码:
FXML
<TableView fx:id="tableView">
<columns>
<TableColumn fx:id="tcolNoStyle"/>
<TableColumn fx:id="tcolStyled"/>
</columns>
</TableView>
控制器
public class TableController {
@FXML
TableView<TableData> tableView;
@FXML
TableColumn<TableData, String> tcolNoStyle;
@FXML
TableColumn<TableData, String> tcolStyled;
@FXML
public void initialize(){
tableView.setRowFactory(row -> new RowFactory());
tcolNoStyle.setCellFactory(cell -> new CellFactoryForNoStyling());
}
}
表格后的数据
public class TableData {
public final SimpleStringProperty noStyleTextProperty;
public final SimpleStringProperty styledTextProperty;
public TableData(){
noStyleTextProperty = new SimpleStringProperty();
styledTextProperty = new SimpleStringProperty();
}
}
RowFactory
public class RowFactory extends TableRow<TableData> {
public RowFactory(){
itemProperty().addListener(((observable, oldValue, newValue) -> {
if (newValue != null){
setStyle("-fx-text-alignment: right");
}
}));
}
}
没有样式的单元格的CellFactory
public class CellFactoryForNoStyling extends TableCell<TableData, String> {
public CellFactoryForNoStyling(){
super();
setStyle(null);
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setStyle(null);
}
}
所以我想要的是,只有那一栏应该没有样式
提前谢谢!
答案 0 :(得分:1)
这里的问题是-fx-text-alignment
属性被继承的事实。 setStyle(null)
仅确保对它所需要的节点没有其他更改。
最简单的选择可能是使用setStyle
简单指定默认值:
public CellFactoryForNoStyling() {
setStyle("-fx-text-alignment: left");
}
您可以将样式留给CSS样式表。这比使用内联样式要方便得多,因为用这种方式处理选择,焦点等很容易。
您可以例如在场景中添加以下样式表;这样,您就不会使用自定义的cellValueFactory
/ rowFactory
:
/* default cell style */
.my-table .table-cell {
-fx-text-alignment: right;
}
/* overwrite above style using selector with higher specifity */
.my-table .table-cell.unstyled {
-fx-text-alignment: inherit;
}
<TableView fx:id="tableView" styleClass="my-table"> <!-- style class added here-->
<columns>
<TableColumn fx:id="tcolNoStyle" styleClass="unstyled"/> <!-- style class added here -->
<TableColumn fx:id="tcolStyled"/>
</columns>
</TableView>