JavaFX没有以16:9的比例显示完整的网页

时间:2017-11-07 16:06:30

标签: java javafx javafx-webengine

下面是代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Main extends Application{

public static void main(String[] args){

    Application.launch(args);

}

@Override

public void start(Stage stage) throws Exception{

    WebView myWebView = new WebView();
    WebEngine engine = myWebView.getEngine();
    engine.load("https://twitter.com/");

    VBox root = new VBox();
    root.getChildren().addAll(myWebView);

    Scene scene = new Scene(root, 1280, 720);
    stage.setScene(scene);

    stage.show();
}
}

如果我运行它,它将在应用程序窗口的前3个季度显示网页,白色框占据另一个季度。如果我最大化窗口会更糟,该网站只占用应用程序窗口的大约一半。不确定是什么引起了这个...

1 个答案:

答案 0 :(得分:2)

您需要让它填充舞台上的整个空间。根据您的选择,您将有上述情况。

案例1:使用BorderPane。

通过将BorderPane直接添加到Stage和BorderPane中心的WebView,它将使webView获取舞台的所有可用宽度和高度。

示例:

@Override
public void start(Stage stage) throws Exception {

    WebView myWebView = new WebView();
    WebEngine engine = myWebView.getEngine();
    engine.load("https://twitter.com/");

    BorderPane root = new BorderPane();
    root.setCenter(myWebView);

    Scene scene = new Scene(root);
    stage.setScene(scene);

    stage.show();
}

案例2:使用VBox或HBox。

这些窗格默认采用VBox的所有可用宽度和HBox空间的高度,并使其他维度由其子节点计算。为了利用整个空间,您需要告诉这些窗格内的节点始终增长(垂直或水平,取决于窗格)

示例:

@Override
public void start(Stage stage) throws Exception {

    WebView myWebView = new WebView();
    WebEngine engine = myWebView.getEngine();
    engine.load("https://twitter.com/");

    VBox root = new VBox(); // or HBox 
    root.getChildren().add(myWebView);

    // HBox.setHgrow(myWebView, Priority.ALWAYS);
    VBox.setVgrow(myWebView, Priority.ALWAYS);

    Scene scene = new Scene(root);
    stage.setScene(scene);

    stage.show();
}

还有许多其他窗格,例如AnchorPane(您需要设置其锚点)或FlowPane等,在某些情况下,您必须将prefWidthProperty和prefHeightProperty与舞台的实际widthProperty / heightProperty绑定。但我相信你明白了。