JavaFX如何从Tab中获取子项(WebView)?

时间:2015-01-27 14:49:16

标签: java javafx

我刚刚开始用JavaFX做事,我正试图建立'一个浏览器。现在我有一个带有两个标签的TabPane。一个选项卡具有WebView,另一个选项卡可以添加新选项卡。 TabPane是一个Textfield。当我进入互联网地址时,我想在所选标签中加载一个网站。

我的问题是,我不知道如何在所选标签内获取Webview。我能够获得所选的Tab,但我不知道如何在其中获取WebView。

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

1 个答案:

答案 0 :(得分:0)

您可以随时调用selectedTab.getContent(),然后向下浏览场景图层次结构,直到找到正确的元素。例如。如果您的标签内容为BorderPaneWebView位于中心,则可以

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

这是非常难看的代码,并且您在更改布局时必须重写它,这意味着您的应用程序变得难以维护。

更好的方法是在适当的范围内创建变量(显示选项卡窗格的视图的控制器,或者如果您在Java中进行布局,则包含它的类)当前网页视图:

private WebView currentWebView ;

然后,每当您创建包含网络视图的新标签页时,请向标签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视图。 (您还需要将其初始化为启动时显示的第一个Web视图。)