This code将创建一个300x300大的3D场景。当我调整包含窗口/舞台的大小时,视口不会调整大小。
Parent
没有width
或height
个属性。如何根据更改的窗口大小调整Parent
和/或SubScene
的大小?
答案 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,...));