如何在JavaFX中使用CSS创建闪烁效果?

问题描述 投票:0回答:1

我需要一个解决方案来仅使用 CSS 创建闪烁效果。我发现 JavaFX 23 中添加了 CSS 转换(link)。但是,我无法使用它创建闪烁。这是我的代码:

public class JavaFxTest10 extends Application { @Override public void start(Stage primaryStage) { var label = new Label("Hello, world!"); label.setStyle("visibility:visible; transition-property: visibility; transition-duration: 0.5s;"); VBox root = new VBox(label); Scene scene = new Scene(root, 400, 200); primaryStage.setTitle("Blinking Example"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
如果可能的话,谁能告诉我该怎么做吗?

java javafx javafx-css
1个回答
0
投票
+1 @DaveB 的精彩文章。那篇文章几乎涵盖了理解 CSS 转换功能的全部细节。

所以如果你实现@DaveB 在他的评论中提到的内容,它将如下所示。

enter image description here

import javafx.application.Application; import javafx.css.PseudoClass; import javafx.css.TransitionEvent; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class JavaFxTest10 extends Application { public static final String CSS = "data:text/css," + // language=CSS """ .myLabel{ -fx-font-size:20px; -fx-opacity: 1; transition: -fx-opacity 200ms ease; } .myLabel:blink{ -fx-opacity: 0; } """; @Override public void start(Stage primaryStage) { var blink = PseudoClass.getPseudoClass("blink"); var label = new Label("Hello, world!"); label.getStyleClass().add("myLabel"); label.addEventHandler(TransitionEvent.END, event -> label.pseudoClassStateChanged(blink, !label.getPseudoClassStates().contains(blink))); VBox root = new VBox(label); Scene scene = new Scene(root, 400, 200); scene.getStylesheets().add(CSS); primaryStage.setTitle("Blinking Example"); primaryStage.setScene(scene); primaryStage.setOnShown(e -> label.pseudoClassStateChanged(blink, true)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.