2014-07-07 14 views
5

This code wird eine 3D-Szene erstellen, die 300x300 groß ist. Das Ansichtsfenster passt sich nicht an, wenn ich die Größe des umgebenden Fensters/der Bühne ändere.Wie ändere ich die Größe eines JavaFX 3D SubScene?

Parent hat keine width oder height Eigenschaften. Wie stelle ich die Größe der Parent und/oder SubScene an die sich ändernde Fenstergröße ein?

Antwort

9

binden sie an die Mutter

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

Ich habe das vor einiger Zeit herausgefunden, aber danke trotzdem. – fho

+0

Übergeordnete Klasse enthält keine heightProperty() oder widthProperty(). – Arceus

+0

Welche Elternklasse verwenden Sie? Können Sie innerhalb der Elternklasse ein Stackpanel hinzufügen und dann Subscene binden? – MitchBroadhead

3

Ich fand es auch wichtig ist, die verwaltete Eigenschaft des SubScene Objekts auf false gesetzt.

subscene.setManaged(false); 

diese Weise die Größe des SubScene Objekt die Größe des übergeordneten StackPane Objekt und Größenanpassung wird auch funktionieren nicht auswirken, wenn die Größe StackPane Objekts zu reduzieren.

+0

Genau was ich brauchte um die Sub Szene zu verkleinern – Josephus87

0

Mit dem folgenden Ansatz können Sie Ihren SubScene in jede Klasse einfügen, die die Pane-Klasse erweitert (z. B. BorderPane, GridPane usw.). Auch der SubScene kann eine andere Größe haben als Ihr Fenster:

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 
       } 
      } 
      } 
Verwandte Themen