如何遍历 JFXTreeTableView 中的行?
How do you iterate through the rows in a JFXTreeTableView?
我正在制作一个 JavaFX 项目并使用 Jfoenix 自定义库来获得更好的组件。在我的时间表 table 中,如果事件的开始日期已经过去,我需要将行变为红色,但是我无法在任何地方在线找到任何关于我应该如何遍历行的答案。
在我的 CSS 文件中,如果行与给定条件与伪 class 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 循环来让 table 中的每个 table 行调用这一行,但还没有找到任何有效的方法。请帮忙。我完全迷路了,在这上面浪费了太多时间。谢谢!!!
您需要更改 rowFactory
并根据项目的数据 属性 和当前时间更新伪类状态。
以下示例应该可以让您了解如何实现它:
final PseudoClass toggleRed = PseudoClass.getPseudoClass("toggleRed");
ObjectProperty<LocalDate> currentDate = ...;
treeTableView.setRowFactory(ttv -> new JFXTreeTableRow<Job>() {
private final InvalidationListener listener = o -> {
Job item = getItem();
pseudoClassStateChanged(toggleRed, item != null && item.getStartDate().isAfter(currentDate.get()));
};
private final WeakInvalidationListener l = new WeakInvalidationListener(listener);
{
// listen to changes of the currentDate property
currentDate.addListener(l);
}
@Override
protected void updateItem(Job item, boolean empty) {
// stop listening to property of old object
Job oldItem = getItem();
if (oldItem != null) {
oldItem.startDateProperty().removeListener(l);
}
super.updateItem(item, empty);
// listen to property of new object
if (item != null) {
item.startDateProperty().addListener(l);
}
// update pseudoclass
listener.invalidated(null);
}
});
如果开始日期 and/or 当前日期不可变,您可以减少使用的侦听器数量。
我正在制作一个 JavaFX 项目并使用 Jfoenix 自定义库来获得更好的组件。在我的时间表 table 中,如果事件的开始日期已经过去,我需要将行变为红色,但是我无法在任何地方在线找到任何关于我应该如何遍历行的答案。
在我的 CSS 文件中,如果行与给定条件与伪 class 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 循环来让 table 中的每个 table 行调用这一行,但还没有找到任何有效的方法。请帮忙。我完全迷路了,在这上面浪费了太多时间。谢谢!!!
您需要更改 rowFactory
并根据项目的数据 属性 和当前时间更新伪类状态。
以下示例应该可以让您了解如何实现它:
final PseudoClass toggleRed = PseudoClass.getPseudoClass("toggleRed");
ObjectProperty<LocalDate> currentDate = ...;
treeTableView.setRowFactory(ttv -> new JFXTreeTableRow<Job>() {
private final InvalidationListener listener = o -> {
Job item = getItem();
pseudoClassStateChanged(toggleRed, item != null && item.getStartDate().isAfter(currentDate.get()));
};
private final WeakInvalidationListener l = new WeakInvalidationListener(listener);
{
// listen to changes of the currentDate property
currentDate.addListener(l);
}
@Override
protected void updateItem(Job item, boolean empty) {
// stop listening to property of old object
Job oldItem = getItem();
if (oldItem != null) {
oldItem.startDateProperty().removeListener(l);
}
super.updateItem(item, empty);
// listen to property of new object
if (item != null) {
item.startDateProperty().addListener(l);
}
// update pseudoclass
listener.invalidated(null);
}
});
如果开始日期 and/or 当前日期不可变,您可以减少使用的侦听器数量。