我正在尝试设置以下日历的样式,以便当TableColumn标头所属的日期不属于当前月份(即3月26日-3月31日和5月1日-5月29日)时是粉红色的:

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

我这样扩展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;


}

但这是结果:

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

所以我尝试了如下样式:

.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的背景:

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

所以我尝试扩展TableColumn

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

但是如您所见,没有pseudoClassStateChanged方法。所以我想知道到底要做什么才能仅更改TableColumn标头?

最佳答案

如何使用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;
}


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

关于java - 如何更改表列的伪类状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43696580/

10-10 02:48