gpt4 book ai didi

java - fxml 加载后获取节点的子节点

转载 作者:行者123 更新时间:2023-12-02 10:12:40 25 4
gpt4 key购买 nike

我的滚动 Pane 有这个问题,内容模糊,我设法像这样修复它:

        Node scrollPaneSkin = menuScroll.getChildrenUnmodifiable().get(0);
scrollPaneSkin.setCache(false);

我正在获取scrollPane的第一个子元素,即scrollPaneSkin并将其缓存设置为false,但是当我在initialize()中执行此操作时,节点仍然没有呈现或其他什么,因为我收到了NullPointerException。所以我用一个时间表来做到这一点:

    Timeline timeline = new Timeline(new KeyFrame(Duration.millis(15),event -> {
Node scrollPaneSkin = menuScroll.getChildrenUnmodifiable().get(0);
scrollPaneSkin.setCache(false);
}));
timeline.play();

它正在工作,但我觉得有更好的方法来做到这一点。如果我尝试在initialize() 中从fxml 获取节点的场景,也会发生同样的情况。如何在initialize()方法中立即获取子元素?

最佳答案

您应该通过监听器来执行此操作,而不是尝试等待一定的时间。你听什么取决于你。一种选择是监听 ScrollPaneskin 属性。

public class Controller {

@FXML private ScrollPane sp;

@FXML
private void initialize() {
// may want to remove the listener once it does its job
sp.skinProperty().addListener((obs, ov, nv) -> {
if (nv != null) {
sp.getChildrenUnmodifiable().get(0).setCache(false);
}
});
}

}

另一个选项是监听 ScrollPane 的子级并在添加适当的节点时使用react。查看源代码,该节点是 StackPane 的匿名子类,其样式类为 "viewport"

请注意,此代码依赖于使用 ScrollPaneSkin 作为外观的 ScrollPane 以及 ScrollPaneSkin 的内部实现。如果您更改皮肤,请务必小心,这可以通过代码、FXML 或 CSS 来完成。更改 JavaFX 版本时要小心;我使用 Java 8u202 尝试了上面的示例,尽管 JavaFX 11.0.2 看起来没有任何相关更改。

关于java - fxml 加载后获取节点的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54888992/

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