1 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊
內(nèi)聯(lián)樣式比CSS樣式表具有更高的優(yōu)先級。因此,所選行的背景也將被覆蓋。構(gòu)造背景的方式要求您使用“指定”-fx-control-inner-background-alt和“-fx-control-inner-background代替”。
[...].setStyle("-fx-control-inner-background: khaki; -fx-control-inner-background-alt: khaki;")
但是,存在一個更嚴(yán)重的問題:
您可以從設(shè)置樣式TableCell。由于TableView負(fù)責(zé)將項目分配給單元格,因此,如果您在不同的列中使用單元格類型,則完成的順序是實現(xiàn)細(xì)節(jié),會導(dǎo)致任意結(jié)果。即使僅在一列中使用這些單元格,也永遠(yuǎn)不會處理單元格為空的情況,因此即使是空單元格也可能仍包含新顏色。
行樣式屬于表行。
如果您使用PseudoClass和CSS樣式表,那么您還將獲得最大的靈活性。
例如
final PseudoClass one = PseudoClass.getPseudoClass("one");
tableView.setRowFactory(t -> new TableRow<Model>() {
private ChangeListener<Integer> listener = (o, oldValue, newValue) -> {
pseudoClassStateChanged(one, newValue == 1);
};
@Override
protected void updateItem(Model model, boolean empty) {
if (getItem() != null) {
getItem().myValueProperty().removeListener(listener);
}
super(model, empty);
if (empty || model == null) {
listener.changed(null, 0, -1);
} else {
model.myValueProperty().addListener(listener);
listener.changed(null, 0, model.getMyValue());
}
}
});
CSS樣式表
.table-row-cell:one {
-fx-control-inner-background: khaki;
-fx-control-inner-background-alt: khaki;
}
此外,你應(yīng)該使用類型參數(shù),以避免轉(zhuǎn)換到您的項目Integer,以String和回Integer(這應(yīng)該由一個投來代替,如果它需要做這樣的。在這種情況下,最好不要使用原始類型)。
final ObservableList<Integer> values = FXCollections.observableArrayList(0, 1);
column.setCellFactory((TableColumn<Model, Integer> p) -> {
ComboBoxTableCell<Model, Integer> cell = new ComboBoxTableCell<Model, Integer>(values) {
@Override
protected void updateItem(Integer item, boolean empty) {
...
}
};
return cell;
});
添加回答
舉報