栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

javafx:表行闪烁

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javafx:表行闪烁

要使内容闪烁,请使用

Timeline

Timeline flasher = new Timeline(    new Keyframe(Duration.seconds(0.5), e -> {        // use "flash" color    }),    new Keyframe(Duration.seconds(1.0), e -> {        // revert to regular color    }));

在这种情况下,更改颜色的最好方法是使用CSS

PseudoClass

PseudoClass flashHighlight = PseudoClass.getPseudoClass("flash-highlight");Node flashingNode = ... ;Timeline flasher = new Timeline(    new Keyframe(Duration.seconds(0.5), e -> {        flashingNode.pseudoClassStateChanged(flashHighlight, true);    }),    new Keyframe(Duration.seconds(1.0), e -> {        flashingNode.pseudoClassStateChanged(flashHighlight, false);    }));flasher.setCycleCount(Animation.INDEFINITE);

然后在外部CSS文件中,您可以配置Flash高亮显示的样式:

.node-type:flash-highlight {    }

要将其绑定到布尔属性,只需使用该属性创建一个侦听器:

someBooleanProperty.addListener((obs, oldValue, newValue) -> {    if (newValue) {        flasher.play();    } else {        flasher.stop();        flashingNode.pseudoClassStateChanged(false);    }});

要将其应用于表格行,您必须编写一个

rowFactory
。您只需要知道该行中显示的项目在该行的生命周期内可能会发生变化,因此您需要相应地更新状态和侦听器:

TableView<Trade> table = ... ;PseudoClass flashHighlight = PseudoClass.getPseudoClass("flash-highlight");table.setRowFactory(tv -> {    TableRow<Trade> row = new TableRow<>();    Timeline flasher = new Timeline(        new Keyframe(Duration.seconds(0.5), e -> { row.pseudoClassStateChanged(flashHighlight, true);        }),        new Keyframe(Duration.seconds(1.0), e -> { row.pseudoClassStateChanged(flashHighlight, false);        })    );    flasher.setCycleCount(Animation.INDEFINITE);    ChangeListener<Boolean> cautionListener = (obs, cautionWasSet, cautionIsNowSet) -> {        if (cautionIsNowSet) { flasher.play();        } else { flasher.stop(); row.pseudoClassStateChanged(flashHighlight, false);        }    };    row.itemProperty().addListener((obs, oldItem, newItem) -> {        if (oldItem != null) { oldItem.cautionProperty().removeListener(cautionListener);        }        if (newItem == null) { flasher.stop(); row.pseudoClassStateChanged(flashHighlight, false);        } else { newItem.cautionProperty().addListener(cautionListener); if (newItem.cautionProperty().get()) {     flasher.play(); } else {     flasher.stop();     row.pseudoClassStateChanged(flashHighlight, false); }        }    });    return row ;});

然后只需定义一个外部CSS文件,例如

.table-row-cell:flash-highlight {    -fx-background: orange ;}

以及您想要的其他任何样式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号