JavaFX如何从选项卡中获取子项(WebView)?
我刚刚开始使用JavaFX,我正在尝试“构建”一个浏览器。现在我有一个带有两个选项卡的选项卡窗格。一个选项卡具有网络视图,另一个选项卡可以添加新选项卡。选项卡窗格上方是一个文本字段。当我输入internet地址时,我想在所选选项卡中加载网站 我的问题是,我不知道如何在所选选项卡中获取Webview。我能够获得所选的选项卡,但我不知道如何在其中获得WebViewJavaFX如何从选项卡中获取子项(WebView)?,java,javafx,Java,Javafx,我刚刚开始使用JavaFX,我正在尝试“构建”一个浏览器。现在我有一个带有两个选项卡的选项卡窗格。一个选项卡具有网络视图,另一个选项卡可以添加新选项卡。选项卡窗格上方是一个文本字段。当我输入internet地址时,我想在所选选项卡中加载网站 我的问题是,我不知道如何在所选选项卡中获取Webview。我能够获得所选的选项卡,但我不知道如何在其中获得WebView int index = TabPane.getSelectionModel().getSelectedIndex(); Tab sele
int index = TabPane.getSelectionModel().getSelectedIndex();
Tab selectedTab = TabPane.getTabs().get(index);
您可以始终调用selectedTab.getContent,然后向下浏览场景图层次结构,直到找到正确的元素。例如,如果您的选项卡内容是一个边框窗格,而WebView位于中间,则可以执行以下操作:
BorderPane selectedBorderPane = (BorderPane) selectedTab.getContent();
WebView selectedWebView = (WebView) selectedBorderPane.getCenter();
不过,这是一段非常难看的代码,而且在任何时候更改布局时都必须重写它,这意味着您的应用程序变得难以维护
更好的方法是在适当的作用域控制器处为显示选项卡窗格的视图或包含它的类(如果您正在用Java为当前web视图进行布局)创建一个变量:
private WebView currentWebView ;
然后,每当您创建包含web视图的新选项卡时,请将侦听器添加到该选项卡的selectedProperty:
现在currentWebView始终引用当前显示的web视图。您还需要将其初始化为启动时显示的第一个web视图
Tab tab = new Tab(...);
// ...
WebView webView = new WebView(...);
// ... layout, etc tab content, etc...
tab.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
if (isNowSelected) {
currentWebView = webView ;
}
});