JavaFX 如何从选项卡中获取子项(WebView)?
JavaFX How to get a children (WebView) from a Tab?
我刚开始用 JavaFX 做事,我正在尝试 'build' 一个浏览器。现在我有一个带有两个选项卡的 TabPane。一个选项卡有一个 WebView,另一个选项卡可以添加新选项卡。 TabPane 上方是一个文本字段。当我输入一个互联网地址时,我想在选定的选项卡中加载一个网站。
我的问题是,我不知道如何在选定的选项卡中获取 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();
不过,这是非常难看的代码,而且每次更改布局时都必须重写它,这意味着您的应用程序变得难以维护。
一个(更好)的方法是在适当的范围内创建一个变量(显示选项卡窗格的视图的控制器,或者 class 包含它,如果你正在做布局Java) 当前网络视图:
private WebView currentWebView ;
然后每当您创建一个包含 Web 视图的新选项卡时,向该选项卡的 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 视图。)
我刚开始用 JavaFX 做事,我正在尝试 'build' 一个浏览器。现在我有一个带有两个选项卡的 TabPane。一个选项卡有一个 WebView,另一个选项卡可以添加新选项卡。 TabPane 上方是一个文本字段。当我输入一个互联网地址时,我想在选定的选项卡中加载一个网站。
我的问题是,我不知道如何在选定的选项卡中获取 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();
不过,这是非常难看的代码,而且每次更改布局时都必须重写它,这意味着您的应用程序变得难以维护。
一个(更好)的方法是在适当的范围内创建一个变量(显示选项卡窗格的视图的控制器,或者 class 包含它,如果你正在做布局Java) 当前网络视图:
private WebView currentWebView ;
然后每当您创建一个包含 Web 视图的新选项卡时,向该选项卡的 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 视图。)