简体   繁体   English

JavaFX SimpleSwingBrowser 自动适应网页

[英]JavaFX SimpleSwingBrowser auto fit web page

In order to support oAuth 2 in my Swing application, I need to load a web page URL supplied by Google.为了在我的 Swing 应用程序中支持 oAuth 2,我需要加载一个由 Google 提供的网页 URL。 Since JavaFX has a better web support, I decide to use the source code from http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm由于 JavaFX 有更好的网络支持,我决定使用来自http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm的源代码

SwingUtilities.invokeLater(new Runnable() {

    public void run() {
        SimpleSwingBrowser browser = new SimpleSwingBrowser();
        browser.setVisible(true);
        browser.loadURL(googleUrl);
    }     
});

Since the code example provided by Oracle doesn't come with "auto-fit web page" feature, I will be getting a display something like由于 Oracle 提供的代码示例没有“自动适应网页”功能,我将得到类似的显示

在此处输入图片说明

The closest example is http://java-no-makanaikata.blogspot.com/2012/10/javafx-webview-size-trick.html .最接近的例子是http://java-no-makanaikata.blogspot.com/2012/10/javafx-webview-size-trick.html However, the example requires us to inject our custom <div> tag into WebView 's content, which is not something I wish to do.但是,该示例要求我们将自定义<div>标签注入到WebView的内容中,这不是我想要做的。 I prefer to HTML content loading, all done by `WebView.我更喜欢 HTML 内容加载,全部由`WebView 完成。

This works for me:这对我有用:

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewHeightTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        String initialURL = "http://stackoverflow.com/questions/23170817/javafx-simpleswingbrowser-auto-fit-web-page" ;
        BorderPane root = new BorderPane();
        TextField locationBar = new TextField(initialURL);
        WebView webView = new WebView();
        WebEngine engine = webView.getEngine();

        locationBar.setOnAction(event -> engine.load(makeUrl(locationBar.getText())));

        root.setTop(locationBar);
        root.setCenter(webView);

            // Get full width and height of page when it's loaded:

        engine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
           if (newState == Worker.State.SUCCEEDED) {
               int width = (Integer) engine.executeScript("document.body.scrollWidth");
               int height = (Integer) engine.executeScript("document.body.scrollHeight");
               System.out.printf("[%d, %d]%n", width, height);
           }
        }); 

        engine.load(initialURL);

        Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private String makeUrl(String text) {
        if (text.contains("://")) {
            return text ;
        } else {
            return "http://"+text ;
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM