2014-04-19 2 views
2

Pour prendre en charge oAuth 2 dans mon application Swing, je dois charger une URL de page Web fournie par Google. Depuis JavaFX a un meilleur support web, je décide d'utiliser le code source de http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htmPage Web de l'adaptation automatique JavaFX SimpleSwingBrowser

SwingUtilities.invokeLater(new Runnable() { 

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

Comme l'exemple de code fourni par Oracle ne vient pas avec la fonction « page web auto-ajustement », je vais obtenir un affichage quelque chose comme

enter image description here

Le plus proche exemple est http://java-no-makanaikata.blogspot.com/2012/10/javafx-webview-size-trick.html. Cependant, l'exemple nous oblige à injecter notre tag personnalisé <div> dans le contenu de WebView, ce que je ne souhaite pas faire. Je préfère le chargement de contenu HTML, tout cela fait par `WebView.

Répondre

2

Cela fonctionne pour moi:

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); 
    } 
} 
+0

Wow. Impressionné. Je me rends compte que j'ai encore besoin d'ajouter un certain décalage, pour le rendre complètement non défilant 'nouvelle dimension (largeur + 16, hauteur + 56)'. Une idée? J'avais essayé de cacher la barre de défilement en utilisant http://stackoverflow.com/questions/11206942/how-to-hide-scrollbars-in-the-javafx-webview Mais, je peux tester si la page chargée est scrollable, en mettant en évidence le contenu et la souris glisser. –

+1

Je ne suis pas certain de comprendre parfaitement, mais si vous agrandissez WebView pour contenir le contenu, les barres de défilement seront supprimées. Si ce javascript ne fournit pas les bonnes dimensions, expérimentez avec un autre javascript comme indiqué dans [ce post] (http://stackoverflow.com/questions/1145850/how-to-get-height-of-entire- document-avec-javascript) –

Questions connexes