如何调整JavaFX 3D SubScene的大小?

时间:2014-07-07 08:43:06

标签: java javafx

This code将创建一个300x300大的3D场景。当我调整包含窗口/舞台的大小时,视口不会调整大小。

Parent没有widthheight个属性。如何根据更改的窗口大小调整Parent和/或SubScene的大小?

4 个答案:

答案 0 :(得分:9)

将其绑定到父

SubScene subscene = new SubScene(root, 1024, 768, true, null);
subscene.setFill(Color.GREY);
subscene.setCamera(camera);
StackPane stackPane = new StackPane();
stackPane.getChildren().add(subscene);
subscene.heightProperty().bind(stackPane.heightProperty());
subscene.widthProperty().bind(stackPane.widthProperty());

答案 1 :(得分:3)

我发现将SubScene对象的托管属性设置为false也很重要。

subscene.setManaged(false);

这样,SubScene对象的大小不会影响其父StackPane对象的大小,并且在减少StackPane对象的大小时也可以调整大小。

答案 2 :(得分:0)

使用以下方法,您可以将SubScene放入任何扩展Pane类的类(例如BorderPane,GridPane等)。此外,subScene可以与您的窗格具有不同的大小:

public class GuiControler extends BorderPane implements Initializable,ChangeListener {

    //Set a changeListener to the Stage's Window and Implement the ChangeListener in the class where you want to make the subScene scaling.

    stage.widthProperty().addListener(this);
    stage.heightProperty().addListener(this); 

 //....


     @Override
            public void changed(ObservableValue observable, Object oldValue, Object newValue) {
                double width = stage.getWidth();
                double height = stage.getHeight();
                if(observable.equals(this.widthProperty())) {
                    double scale = width / 400; // 400 is my initial width size of the stage (main java app window) window
                    subScene.setWidth(200*scale); // 200 is my initial size of the subscene window
                }else if(observable.equals(this.heightProperty())){
                    double scale = height / 400; // 400 is initial size for stage height window
                    subScene.setHeight(250*scale); // 250 is initial size for subScene width
                }
            }
            }

答案 3 :(得分:0)

Ypu可能要使用getTransforms()。add(new Scale(parameter1,para2,...));