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

Java 如何更改表列的伪类状态?,java,css,javafx,tableview,tablecolumn,Java,Css,Javafx,Tableview,Tablecolumn,我正在尝试设置以下日历的样式,以便当它们所属的日期不属于当前月份(即3月26日至3月31日和5月1日至5月29日)时,TableColumn标题为粉红色: 我扩展了TableView如下: public class DayTableView extends TableView<Appointment> { private static PseudoClass OFF_MONTH_PSEUDO_CLASS = PseudoClass.getPseudoClass("off-mont

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

我扩展了
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 .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;
.day-table-view .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;
}

}

但结果是:

所以我试着这样做:

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 .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;
.day-table-view .table-column  {
-fx-font-size: 9 px;
-fx-background-color: lightcyan;
}

}

但是
TableColumn
s仅以浅青色格式化(它看起来就像第一个日历图像)

所以我尝试了这种风格:

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

}

它起作用了,除了我只希望
TableColumn
标题改变颜色,而不是
TableColumn
s的背景:

因此,我尝试扩展
TableColumn


但是正如您所看到的,没有任何
pseudoClassStateChanged
方法。因此我想知道我到底需要做什么才能使
TableColumn
标题发生更改?

使用
查找如何

tableView.applyCss();
tableView.layout();
PseudoClass pseudoClass = PseudoClass.getPseudoClass("off-month");
tableView.lookupAll(".column-header").forEach(node -> {
    node.pseudoClassStateChanged(pseudoClass, true);
});


使用
查找如何

tableView.applyCss();
tableView.layout();
PseudoClass pseudoClass = PseudoClass.getPseudoClass("off-month");
tableView.lookupAll(".column-header").forEach(node -> {
    node.pseudoClassStateChanged(pseudoClass, true);
});