你如何遍历 JFXTreeTableView 中的行?

我正在制作一个 JavaFX 项目并使用 Jfoenix 自定义库来制作更好的组件。在我拥有的日程表中,如果事件的开始日期已经过去,我需要将行变为红色,但是我无法在任何地方在线找到任何关于如何遍历行的答案。


在我的 CSS 文件中,如果行与伪类匹配给定条件,我需要此行将行设置为红色toggleRed。


.jfx-tree-table-view > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:toggleRed {

    -fx-background-color: red;

}

所以在我的控制器初始化方法中,如果行对象有效,我将有这一行


row.pseudoClassStateChanged(PseudoClass.getPseudoClass("toggleRed"), true);

我需要某种 for 循环来让表中的每一行都在这条线上调用,但还没有找到任何有效的东西。请帮忙。我完全迷失了,在这上面浪费了太多时间。谢谢!!!


波斯汪
浏览 199回答 1
1回答

白衣染霜花

您需要rowFactory根据项目的数据属性和当前时间更改和更新伪类状态。以下示例应该让您了解如何实现这一点:final PseudoClass toggleRed = PseudoClass.getPseudoClass("toggleRed");ObjectProperty<LocalDate> currentDate = ...;treeTableView.setRowFactory(ttv -> new JFXTreeTableRow<Job>() {&nbsp; &nbsp; private final InvalidationListener listener = o -> {&nbsp; &nbsp; &nbsp; &nbsp; Job item = getItem();&nbsp; &nbsp; &nbsp; &nbsp; pseudoClassStateChanged(toggleRed, item != null && item.getStartDate().isAfter(currentDate.get()));&nbsp; &nbsp; };&nbsp; &nbsp; private final WeakInvalidationListener l = new WeakInvalidationListener(listener);&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // listen to changes of the currentDate property&nbsp; &nbsp; &nbsp; &nbsp; currentDate.addListener(l);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; protected void updateItem(Job item, boolean empty) {&nbsp; &nbsp; &nbsp; &nbsp; // stop listening to property of old object&nbsp; &nbsp; &nbsp; &nbsp; Job oldItem = getItem();&nbsp; &nbsp; &nbsp; &nbsp; if (oldItem != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldItem.startDateProperty().removeListener(l);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; super.updateItem(item, empty);&nbsp; &nbsp; &nbsp; &nbsp; // listen to property of new object&nbsp; &nbsp; &nbsp; &nbsp; if (item != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item.startDateProperty().addListener(l);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; // update pseudoclass&nbsp; &nbsp; &nbsp; &nbsp; listener.invalidated(null);&nbsp; &nbsp; }});如果开始日期和/或当前日期是不可变的,您可以减少使用的侦听器数量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java