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); |
您总是可以调用
1 2 | BorderPane selectedBorderPane = (BorderPane) selectedTab.getContent(); WebView selectedWebView = (WebView) selectedBorderPane.getCenter(); |
不过,这是非常难看的代码,而且每次更改布局时都必须重写它,这意味着您的应用程序变得难以维护。
一个(很多)更好的方法是在适当的范围内创建一个变量(用于显示选项卡窗格的视图的控制器,或者如果您使用 Java 进行布局,则为包含它的类)为当前 web 创建一个变量视图:
1 | private WebView currentWebView ; |
然后,每当您创建一个包含 Web 视图的新选项卡时,将侦听器添加到选项卡的
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 ; } }); |
现在