为了账号安全,请及时绑定邮箱和手机立即绑定

你如何遍历 JFXTreeTableView 中的行?

你如何遍历 JFXTreeTableView 中的行?

波斯汪 2021-11-17 17:25:21
我正在制作一个 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 循环来让表中的每一行都在这条线上调用,但还没有找到任何有效的东西。请帮忙。我完全迷失了,在这上面浪费了太多时间。谢谢!!!
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您需要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);

    }

});

如果开始日期和/或当前日期是不可变的,您可以减少使用的侦听器数量。


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信