如何让 JavaFx TabPane 标题成为 WebView 的站点标题?

How to get JavaFx TabPane title to be WebView's site title?

我正在使用 JavaFx,并且有带有 WebView objects 的选项卡。我正在尝试让我的标签标题的文本像大多数网络浏览器一样阅读网页的标题。当我使用 "getTitle" 方法时,我得到一个空标题,我认为这是因为页面尚未加载。我所做的所有研究都为我提供了 Android 解决方案,我正在寻找适用于桌面应用程序的解决方案。这就是我所拥有的。

public class WebsiteTab extends Tab {

    final static String DEFAULT_SITE = "https://google.com";

    VBox browserBox;
    WebView webView;

    public WebsiteTab() {
        super("Site One");
        webView = new WebView();
        webView.setPrefHeight(5000);

        goToSite(DEFAULT_SITE);

        browserBox = new VBox(10,webView);
        VBox.setVgrow(browserBox, Priority.ALWAYS);

        setContent(browserBox);
    }

    public void goToSite(final String site) {
        webView.getEngine().load(site);
        setText(webView.getEngine().getTitle());
    }
}

如有任何帮助,我们将不胜感激。

您可以将选项卡的 text 属性 绑定到网络引擎的 title 属性。

public class WebsiteTab extends Tab {

    final static String DEFAULT_SITE = "https://google.com";

    VBox browserBox;
    WebView webView;

    public WebsiteTab() {
        super("Site One");
        webView = new WebView();
        webView.setPrefHeight(5000);

        textProperty().bind(webView.getEngine().titleProperty()); // bind the properties

        goToSite(DEFAULT_SITE);

        browserBox = new VBox(10,webView);
        VBox.setVgrow(browserBox, Priority.ALWAYS);

        setContent(browserBox);
    }

    public void goToSite(final String site) {
        webView.getEngine().load(site);
    }
}

这将导致 text 属性 始终与 title 属性 具有相同的值。换句话说,当 title 属性 的值改变时 text 属性 将自动更新。请注意,我在构造函数中绑定了属性,因为您只需要创建一次绑定。另请注意,绑定后您无法再手动设置 text 属性;尝试这样做将导致抛出异常。有关详细信息,请参阅 Using JavaFX Properties and Binding