2016-07-18 104 views
1

我想更改JavaFx应用程序的StageWebView的大小。JavaFX阶段的WebView大小

我可以更改窗口大小,但浏览器大小不会从800px增加,因此html页面的显示不适合所有窗口。

它看起来像这样(请注意右边的浅灰色区域):

enter image description here

这是页面的一些代码:

public class EfadosApp extends Application { 
    private Scene scene; 

    @Override public void start(Stage stage) { 
     scene = new Scene(new Browser(), 1000,500); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

class Browser extends Region { 
    final WebView browser = new WebView(); 
    final WebEngine webEngine = browser.getEngine(); 

    public Browser() { 
     webEngine.load("www.oracle.com"); 
     getChildren().add(browser); 
    } 
} 

回答

1

你可以简单地延伸解决这个问题例如StackPane而不是Region

class Browser extends StackPane { 
    ... 
} 

不同的是,Region调整大小的孩子他们的首选大小:

默认情况下,一个地区继承其超, 家长,布局行为,这意味着它会调整任何可调整大小的子节点 他们的首选大小,但不会重新定位它们。如果应用程序 需要更具体的布局行为,则应使用 区域子类之一:StackPane,HBox,VBox,TilePane,FlowPane,BorderPane,GridPane或AnchorPane。

虽然StackPane试图调整其子以适合内容区域:

的stackpane将尝试调整每个孩子填写其内容 区域。如果孩子的体积不足以填充堆叠面板( ,因为它不可调整大小或最大尺寸阻止),那么它将使用alignment属性在该区域内对齐,其中 默认为Pos.CENTER。

当然这也意味着,如果你使用Region但任你设置WebViewpreferred size为“事大”之类

browser.setPrefSize(5000, 5000); 

,或者您绑定WebViewheightPropertywidthProperty到相应的属性Stage,

Browser browser = new Browser(); 
browser.browser.prefHeightProperty().bind(stage.heightProperty()); 
browser.browser.prefWidthProperty().bind(stage.widthProperty()); 
scene = new Scene(browser, 1000, 500); 

它也会工作如你所料。