gpt4 book ai didi

JAVAFX : Tableview row selection behaviour

转载 作者:行者123 更新时间:2023-12-02 02:04:16 25 4
gpt4 key购买 nike

我有以下代码来设置 TableRow 的背景颜色,

column.setCellFactory((TableColumn<Model, Integer> p) -> {
ComboBoxTableCell cell = new ComboBoxTableCell(FXCollections.observableArrayList(0, 1)) {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (!empty && item != null) {
if(Integer.valueOf(item.toString()) == 1){
getTableRow().setStyle("-fx-background-color: khaki;");
}else if(Integer.valueOf(item.toString()) == 0){
getTableRow().setStyle(null);
}
}
}
};
return cell;
});

问题是当我选择背景设置为某种颜色的行时,表示选择的默认蓝色位于后面。 (如下)

enter image description here

如何保留默认选择颜色?

最佳答案

内联样式比 CSS 样式表具有更高的优先级。因此,所选行的背景也会被覆盖。构建背景的方式要求您使用指定 -fx-control-inner-background-alt-fx-control-inner-background 来代替。

[...].setStyle("-fx-control-inner-background: khaki; -fx-control-inner-background-alt: khaki;")

但是有一个更糟糕的问题:

您可以从TableCell 设置样式。由于 TableView 负责将项目分配给单元格,因此如果您在不同列中使用单元格类型,则完成的顺序是导致任意结果的实现细节。即使您仅在一列中使用这些单元格,您也永远不会处理单元格变空的情况,因此即使是空单元格也可能仍包含新颜色。

行样式属于表格行。

如果您使用 PseudoClass 和 CSS 样式表,您还将获得最大的灵 active 。

例如

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;
}

此外,您应该使用类型参数来避免将项目从 Integer 转换为 String 再转换回 Integer(应替换为如果需要这样做的话,可以进行强制转换。在这种情况下,最好不要使用原始类型。)。

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;
});

关于JAVAFX : Tableview row selection behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51042309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com