关于 java:JavaFX 如何从选项卡中获取子项(WebView)? | 珊瑚贝

JavaFX How to get a children (WebView) from a Tab?


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

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

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

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

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

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

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

1
private WebView currentWebView ;

然后,每当您创建一个包含 Web 视图的新选项卡时,将侦听器添加到选项卡的 selectedProperty:

1
2
3
4
5
6
7
8
9
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 视图。)


来源:https://www.codenong.com/28173252/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8803.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?