JavaFX 如何从选项卡获取子级(WebView)?

标签 java javafx

我刚刚开始使用 JavaFX 做事情,我正在尝试“构建”一个浏览器。现在我有一个带有两个选项卡的 TabPane。一个选项卡具有 WebView,另一个选项卡能够添加新选项卡。选项卡 Pane 上方是一个文本字段。当我输入互联网地址时,我想在所选选项卡中加载网站。

我的问题是,我不知道如何在选定的选项卡中获取 Webview。我能够获取选定的选项卡,但我不知道如何获取其中的 WebView。

int index = TabPane.getSelectionModel().getSelectedIndex();
Tab selectedTab = TabPane.getTabs().get(index);

最佳答案

您始终可以调用selectedTab.getContent(),然后向下导航场景图层次结构,直到找到正确的元素。例如。如果您的选项卡内容是 BorderPane 并且 WebView 位于中心,您可以这样做

BorderPane selectedBorderPane = (BorderPane) selectedTab.getContent();
WebView selectedWebView = (WebView) selectedBorderPane.getCenter();

不过,这是非常丑陋的代码,并且每次更改布局时都必须重写它,这意味着您的应用程序变得难以维护。

更好的方法是在适当的范围内为当前 Web View 创建一个变量(显示选项卡 Pane 的 View 的 Controller ,或者如果您在 Java 中进行布局则包含它的类):

private WebView currentWebView ;

然后,每当您创建包含 Web View 的新选项卡时,请向该选项卡的 selectedProperty 添加监听器:

Tab tab = new Tab(...);
// ...
WebView webView = new WebView(...);
// ... layout, etc tab content, etc...
tab.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
    if (isNowSelected) {
        currentWebView = webView ;
    }
});

现在currentWebView始终引用当前显示的Web View 。 (您还需要将其初始化为启动时显示的第一个 Web View 。)

关于JavaFX 如何从选项卡获取子级(WebView)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28173252/

相关文章:

java - 长度为 1 初始化的数组出现 NullPointerException

Java ResultSet 跳过记录

java - 错误: JPA + MySQL Transaction is not active in the current thread

java - 使用嵌入式 jetty 服务器运行 Web 应用程序 (WAR)

java - 按键事件未触发

java - 在 JavaFX 中将元素动态添加到固定大小的 GridPane

java - List的逐次继承

java - Raspberry Pi 和 javaFX 命令错误

Java ChoiceDialog 更改默认按钮顺序

javafx - 将文本 append 到 TextArea 时出现问题 (JavaFX 8)