Javafx fadetransition 不透明度错误

问题描述 投票:0回答:1
我在我的项目中使用淡入淡出过渡作为并行过渡的子项。我将业务逻辑的按钮的不透明度从 1 更改为 0。当我使用 setStyle() 方法更改不相关的 ToggleButtons(不是淡入淡出或并行过渡的子级)样式时,不相关的 ToggleButton 的不透明度发生变化,我认为它与过渡的时间有关框架,但我无法解决。

使用此代码将按钮涂成红色。

try { if (thePane.getChildren() != null) { for (Node node : thePane.getChildren()) { if (node instanceof GridPane) { ObservableList<Node> nodes = ((GridPane) node).getChildren(); for (Node node1 : nodes) { if (node1 instanceof ToggleButton) { ToggleButton toggle= ((ToggleButton) node1); if (toggle!= null) { if (toggle.getId().equals(id)) { if (toggle.isSelected()) { toggle.styleProperty().setValue("-fx-background-color: #ff0000,linear-gradient(#a81010 0%, #ba2525 20%, #ea2525 100%),linear-gradient(#a81010, #ea2525),radial-gradient(center 50% 0%, radius 100%, rgba(214,21,21,0.9), rgba(255,255,255,0));"); } else { toggle.styleProperty().setValue("-fx-background-color: #a50000,linear-gradient(#870909 0%, #c93434 20%, #a00303 100%), linear-gradient(#870909, #a00303), radial-gradient(center 50% 0%, radius 100%, rgba(148,114,114,0.9), rgba(255,255,255,0));"); } } } } } } } } }

并使用以下几行代码将一些按钮添加到 FadeTransition 作为 Paralleltransition 的子级以制作 flash。

try{ ToggleButton toggle= getToggleButton(); FadeTransition fadeTransition = new FadeTransition(Duration.seconds(0.9), toggle); fadeTransition.setNode(toggle); fadeTransition.setFromValue(10.0); fadeTransition.setToValue(0.0); fadeTransition.setCycleCount(Animation.INDEFINITE); if (fadeTransitionList.get(toggle.getId()) == null) { parallelTransition.stop(); parallelTransition.getChildren().add(fadeTransition); parallelTransition.play(); fadeTransitionList.put(toggle.getId(), fadeTransition); } } catch (Exception e){ e.printStackTrace(); }

正如我所说,不相关的按钮(尚未添加到 ParallelTransition(也称为 FadeTransition)的)不透明度会发生变化。

我认为 JavaFX 中的淡入淡出过渡针对屏幕中的某个区域运行,并且该区域会影响不相关的按钮

如有任何帮助,我们将不胜感激。

java javafx java-8 javafx-8
1个回答
0
投票
我遇到了与OP报告的类似问题。在我的应用程序中,我为具有多个组件的系统提供了“健康”状态项的树视图。要求是在有限时间内在树中闪烁“BAD”运行状况组件,以响应运行状况变为“BAD”,即引起对该问题的关注。 正如其他帖子所推荐的,我使用了 JavaFX FadeTransition 类来完成此操作,但是,我有时会看到以下内容:

    邻近的树节点有时会像目标节点一样开始闪烁。如果 TreeView 滚动,这种情况会加剧。
  • 当循环次数完成时,闪烁的节点可能会处于部分褪色的状态。
这是使用的代码片段:

/** * Flash a health tree node using the FadeTransition animation * * @param item The TreeCell item * @param rate Flashing rate per second * @param mins Number of mins to flash */ private void flash(HealthItem item, int rate, int mins) { FadeTransition fadeTransition = new FadeTransition(Duration.seconds(1.0 / rate), this); fadeTransition.setFromValue(1.0); fadeTransition.setToValue(0.0); fadeTransition.setCycleCount(mins * rate * 60); fadeTransition.setAutoReverse(true); fadeTransition.setOnFinished(event -> { item.stopFlash(); }); item.setFlash(fadeTransition); // This method will call the fadeTransition.play() }
根据我对 FadeTransition 的观察,我将研究实现目标的替代方法。

© www.soinside.com 2019 - 2024. All rights reserved.