gpt4 book ai didi

java - JavaFX 8 节点/区域/ Pane 上的背景颜色转换

转载 作者:行者123 更新时间:2023-11-29 06:53:14 25 4
gpt4 key购买 nike

是否可以在任意节点/区域/ Pane 上做一个简单的背景“闪光”效果并逐渐淡出?

我只想在 VBox(包含标签)上显示微妙/短暂的红色/白色“闪光”效果,以便在标签值更改时引起注意。

编辑:到目前为止,我发现的所有这种性质的例子似乎都使用了“形状”(这是一个节点),但当然 VBox 或 Pane 不是形状 - 所以这无济于事我太多了。在 VBox 上调用 getShape() 只会返回一个空值,所以这没有帮助(我猜布局代码尚未执行)。

编辑 2:这几乎可以工作,但是这个该死的效果似乎完全覆盖了(我认为)VBox 中的所有内容,包括文本标签。

ColorInput effect = new ColorInput(0, 0, 900, 25, Paint.valueOf("#FFDDDD"));

Timeline flash = new Timeline(
new KeyFrame(Duration.seconds(0.4), new KeyValue(effect.paintProperty(), Paint.valueOf("#EED9D9"))),
new KeyFrame(Duration.seconds(0.8), new KeyValue(effect.paintProperty(), Paint.valueOf("#E0DDDD"))),
new KeyFrame(Duration.seconds(1.0), new KeyValue(effect.paintProperty(), Paint.valueOf("#DDDDDD"))));
vbox.setEffect(effect);
flash.setOnFinished(e -> vbox.setEffect(null));
flash.play();

最佳答案

最好的方法是提供自定义动画,像这样(详细说明 fabian 的回答):

@Override
public void start(Stage primaryStage) {

Label label = new Label("Bla bla bla bla");

Button btn = new Button("flash");
VBox box = new VBox(10, label, btn);
box.setPadding(new Insets(10));

btn.setOnAction((ActionEvent event) -> {

//**************************
//this animation changes the background color
//of the VBox from red with opacity=1
//to red with opacity=0
//**************************
final Animation animation = new Transition() {

{
setCycleDuration(Duration.millis(1000));
setInterpolator(Interpolator.EASE_OUT);
}

@Override
protected void interpolate(double frac) {
Color vColor = new Color(1, 0, 0, 1 - frac);
box.setBackground(new Background(new BackgroundFill(vColor, CornerRadii.EMPTY, Insets.EMPTY)));
}
};
animation.play();

});

Scene scene = new Scene(box, 100, 100);

primaryStage.setScene(scene);
primaryStage.show();

}

关于java - JavaFX 8 节点/区域/ Pane 上的背景颜色转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com