如何更改表列的伪类状态?

时间:2017-04-29 14:04:20

标签: java css javafx tableview tablecolumn

我尝试设置以下日历的样式,以便TableColumn标题为粉红色,当它们所属的日期不属于当月(即3月26日 - 3月31日和5月1日 - 5月第29次):

enter image description here

我像这样扩展TableView

public class DayTableView extends TableView<Appointment> {

private static PseudoClass OFF_MONTH_PSEUDO_CLASS = PseudoClass.getPseudoClass("off-month");

public DayTableView() {
    getStyleClass().add("day-table-view");
}

private BooleanProperty offMonth = new BooleanPropertyBase(false) {

    public void invalidated() {
        pseudoClassStateChanged(OFF_MONTH_PSEUDO_CLASS, get());
    }

    @Override
    public Object getBean() {
        return this;
    }

    @Override
    public String getName() {
        return "off-month";
    }
};

public void setOffMonth(boolean b) {
    offMonth.set(b);
}

}

并添加了这个样式:

.day-table-view  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;

}

.day-table-view:off-month {
-fx-font-size: 9 px;
-fx-background-color: pink;

}

但结果就是这样:

enter image description here

所以我尝试了这样的样式:

.day-table-view .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;

}

.day-table-view .table-column:off-month {
-fx-font-size: 9 px;
-fx-background-color: pink;

}

TableColumn仅以浅青色格式化(它看起来就像第一张日历图像。

所以我尝试了这种造型:

.day-table-view .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;

}

.day-table-view:off-month .table-column {
-fx-font-size: 9 px;
-fx-background-color: pink;

}

除非我只希望TableColumn 标题更改颜色,而不是TableColumn s的背景:

enter image description here

所以我试着改为TableColumn

enter image description here

但是你可以看到没有pseudoClassStateChanged方法。所以我想知道我需要做些什么才能使TableColumn标题发生变化?

1 个答案:

答案 0 :(得分:0)

如何使用lookup

tableView.applyCss();
tableView.layout();
PseudoClass pseudoClass = PseudoClass.getPseudoClass("off-month");
tableView.lookupAll(".column-header").forEach(node -> {
    node.pseudoClassStateChanged(pseudoClass, true);
});
.table-view .column-header:off-month {
    -fx-background-color: pink;
}

enter image description here