- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 FadeTransition
在 3 个不同的 AnchorPane
之间切换(点击 Button
),下面是我的代码,
public class TestSlide extends Application {
private ObjectBinding<Node> frontNode;
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
AnchorPane pane1 = new AnchorPane(new Button("1"));
AnchorPane pane2 = new AnchorPane(new Button("2"));
AnchorPane pane3 = new AnchorPane(new Button("3"));
root.getChildren().addAll(pane1, pane2, pane3);
handleAnimation(root);
BorderPane border= new BorderPane(root);
HBox bottom = new HBox(10);
Button front1 = new Button("Pane 1");
Button front2 = new Button("Pane 2");
Button front3 = new Button("Pane 3");
front1.setOnAction((ActionEvent event) -> {
pane1.toFront();
});
front2.setOnAction((ActionEvent event) -> {
pane2.toFront();
});
front3.setOnAction((ActionEvent event) -> {
pane3.toFront();
});
bottom.getChildren().addAll(front1, front2, front3);
border.setBottom(bottom);
Scene scene = new Scene(border,400,400);
primaryStage.setScene(scene);
primaryStage.show();
}
private void handleAnimation(StackPane root) {
frontNode = Bindings.valueAt(root.getChildren(),
Bindings.size(root.getChildren()).subtract(1));
frontNode.addListener((obs, oldNode, newNode) -> {
SequentialTransition fadeOutIn = new SequentialTransition();
if (oldNode != null) {
FadeTransition fadeOut = new FadeTransition(Duration.millis(500), oldNode);
fadeOut.setToValue(0);
fadeOutIn.getChildren().add(fadeOut);
}
if (newNode != null) {
FadeTransition fadeIn = new FadeTransition(Duration.millis(500), newNode);
fadeIn.setFromValue(0);
fadeIn.setToValue(1);
fadeOutIn.getChildren().add(fadeIn);
}
fadeOutIn.play();
});
}
public static void main(String[] args) {
launch(args);
}
}
handleAnimation
方法引用自另一个 SO 帖子。
问题是,
启动应用程序后,单击 Pane 1 按钮
。 -> Transition 将首先显示 pane2
,然后是 pane1
。
现在点击 Pane 3 Button
-> Transition 将首先显示 pane2
然后是 pane3
.
现在点击Pane 2 Button
-> Transition会显示pane2
,上面2点提到的问题不会出现再次出现。
为什么在第 1 点和第 2 点显示实际 Pane 之前转换显示 pane2
?是由于不透明度设置吗?
为什么在第 3 点之后问题得到解决?
如何在不显示第三个 Pane 的情况下使过渡工作到 FadeIn
和 FadeOut
各自的 Pane
?
最佳答案
这里的问题是 StackPane
的子级的初始状态是错误的:所有节点的不透明度为 1。当没有动画运行时,您想要的状态具有所有节点,但最后一个节点完全透明(不透明度 = 0)和最后一个完全不透明(不透明度 = 1)。您应该能够通过正确初始化不透明度来解决此问题:
root.getChildren().addAll(pane1, pane2, pane3);
// set opacity for all but the last child to 0
List<Node> children = root.getChildren();
for (int i = children.size()-2; i >= 0; i--) {
children.get(i).setOpacity(0);
}
否则会发生以下情况:
就在 pane1.toFront()
之后。请注意,(SequentialTransition
确保建立动画开始的状态。
最上面的节点是列表中的最后一个子节点,----...
放在可见“层”的旁边。
Pane 1: opacity = 0
Pane 3: opacity = 1 ------------------------------
Pane 2: opacity = 1
现在 SequentialTransition
的前半部分完成后,看起来如下:
Pane 1: opacity = 0
Pane 3: opacity = 0
Pane 2: opacity = 1 ------------------------------
动画完成后:
Pane 1: opacity = 1 ------------------------------
Pane 3: opacity = 0
Pane 2: opacity = 1
使用 pane3.toFront()
产生类似的结果:
Pane 3: opacity = 0
Pane 1: opacity = 1 ------------------------------
Pane 2: opacity = 1
Pane 3: opacity = 0
Pane 1: opacity = 0
Pane 2: opacity = 1 ------------------------------
Pane 3: opacity = 1 ------------------------------
Pane 1: opacity = 0
Pane 2: opacity = 1
关于JavaFX : StackPane Sequential Transition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471869/
正如标题所说,我正在使用 StackPane 来堆叠我的 AnchorPanes(AnchorPaneName.setFront())。我想知道哪个 AnchorPane 在顶部/前面。是否可以获得前
好的,我用一个更简单的小例子重新编辑了这个问题。 我的问题是,我有一个 StackPane,myStackPane,我正在尝试将标签加载到其中。当程序第一次运行时,StackPane 是空的。当我单击
我最近探索了 JavaFX,并发现了一个通过 php 脚本执行登录的简单登录表单。根据结果,登录表单指示错误标签或重定向到新场景。 在实际登录过程中,我想显示一个进度条,只要登录不成功,我就将其与
当我运行下面的程序时 import javafx.application.Application; import javafx.application.Platform; import javafx.
OrangeBlock是一个橙色方块,里面有文字。它被实现为 StackPane包含矩形顶部的文本。 (此方法在 the documentation for StackPane 中演示。) 我已经放置
我读过一些关于 JavaFX 中的场景与 Pane /堆栈 Pane 的内容。我只是很难确定是否存在“行业标准”。首先,我想从“登录”->“仪表板”->“其他“屏幕””。关于场景与堆栈 Pane ,是
我有一个带有图表的 stackPane,我正在尝试覆盖一个标签以适应图表的顶部,有点像第二个轴。我已经设法将覆盖层附加到底部轴,但我不知道如何将其整齐地附加到顶部。 这是实现上图的代码: priv
我不知道如何获得 StackPane 的宽度: 如果我引用 http://docs.oracle.com/javafx/2.0/api/javafx/scene/layout/StackPane.ht
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 3 年前。 在这方面已经有很长一段时间了,一
我想要一个矩形和一个标签在StackPane中对齐,但是我的代码没有达到预期的结果: FXML:
我正在尝试使 StackPane 位于 我的主 BorderPane 的元素占据了窗口的整个垂直高度,即使在调整大小时也是如此。我怎样才能做到这一点?这是我到目前为止所得到的:
我是 JavaFX 新手。我正在尝试创建一个简单的居中菜单,其中包含带有下面按钮的文本。 我创建了两个元素:Text title 和Button testButton。然后我创建了 StackPane
在我正在开发的 JavaFX 程序中,我有一个 StackPane。第一个 child 是一个 BorderPane,里面有其他东西。 我希望能够显示弹出窗口,使弹出窗口以外的所有内容变暗,以创建额外
请查看附图,在 StackPane 编号“1”内,我添加了一个名为“Icon”的图像,并将其 Y 位置更改为在 StackPane 的顶部,但是发生了什么图像图标的额外部分没有尽管设置了 StackP
我正在尝试使用 FadeTransition 在 3 个不同的 AnchorPane 之间切换(点击 Button),下面是我的代码, public class TestSlide extends A
我使用 StackPane 作为图形、面板等的容器。我发现坐标 X,Y (0,0) 放置在面板的正中央。 是否可以将其移动到 Pane 的左上角?从中心计算所有尺寸要困难得多。 最佳答案 您可以使用
下面是 Main.class 和 Controller.class ,我试图使其尽可能简单。 程序输出以下窗口: 黑色是一个名为 visualizerStackPane 的 StackPane ,其
如您所见,我是一名初级开发人员,也是 stackOverflow 社区的新人。所以请不要告诉我我很蠢(或者我至少不知道为什么:)) 我正在用 javaFx 编写一个小应用程序,但我遇到了一个小问题,我
相关问题:Nodes - Choose the Layer to appear JavaFX2 我将 JavaFx 8 与 SceneBuilder 2 一起使用。我有许多 Pane 作为 Stack
我只是有一个非常基本的问题,我想知道制作一堆卡片的最佳方法是什么,其中每张卡片都是偏移的。在下面的代码中,我尝试使用 StackPane,但问题是它似乎没有注册偏移坐标。 在下图中,您将看到我尝试向庄
我是一名优秀的程序员,十分优秀!