2012-01-09 13 views
5

Próbowałem ustawić szerokość i wysokość sceny poza konstruktorem i to na nic się nie przydało. Po przejrzeniu interfejsu API Scene zobaczyłem metodę, która pozwala uzyskać wysokość i szerokość odpowiednio, ale nie jedną, aby ustawić metodę ..: s (wada projektu może).Ustaw szerokość i wysokość sceny

Po dalszych badaniach natrafiłem na SceneBuilder i znalazłem metody, które mogą modyfikować wysokość i szerokość. Jednak nie wiem, jak zastosować go do obiektu sceny już utworzonego lub jak utworzyć obiekt, który mógłby zostać użyty zamiast obiektu sceny.

Odpowiedz

8

Po utworzeniu Scene i przypisaniu go do Stage można użyć Stage.setWidth i Stage.setHeight, aby zmienić jednocześnie rozmiary sceny i sceny.

SceneBuilder nie można zastosować do już utworzonego obiektu, można go używać tylko do tworzenia scen.

+0

Ok, dzięki. To jest droga, którą nie myślałem o użyciu lub nie wiedziałem, że mógłbym użyć. Wielkie dzięki, wypróbuję to i dam ci znać, jak poszło. – Chika

+0

Wielkie dzięki za to. To działa, twoja sugestia była doskonała, jednak jeszcze jedno pytanie. Powinienem być w stanie usunąć scenę lub etap, prawda? Jak mogę to zrobić? – Chika

+1

do etapu "wyczyszczenia" przypisać do niego pustą scenę: 'stage.setScene (new Scene());'. Aby wyczyścić scenę, ustaw pusty root: 'scene.setRoot (new Group());' lub usuń wszystkie elementy potomne root'a: 'scene.getRoot(). GetChildren(). Clear();' –

2

Po prostu chciałem zamieścić inną odpowiedź dla tych, którzy mogli mieć podobny problem jak mój.

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html

Nie ma setWidth() lub setHeight(), a nieruchomość jest ReadOnly, ale jeśli spojrzeć na

Constructors 

Scene(Parent root) 
Creates a Scene for a specific root Node. 

Scene(Parent root, double width, double height) 
Creates a Scene for a specific root Node with a specific size. 

Scene(Parent root, double width, double height, boolean depthBuffer) 
Constructs a scene consisting of a root, with a dimension of width and height, and specifies whether a depth buffer is created for this scene. 

Scene(Parent root, double width, double height, boolean depthBuffer, SceneAntialiasing antiAliasing) 
Constructs a scene consisting of a root, with a dimension of width and height, specifies whether a depth buffer is created for this scene and specifies whether scene anti-aliasing is requested. 

Scene(Parent root, double width, double height, Paint fill) 
Creates a Scene for a specific root Node with a specific size and fill. 

Scene(Parent root, Paint fill) 
Creates a Scene for a specific root Node with a fill. 

Jak widać, jest to, w którym można ustawić wysokość i jeśli szerokość musisz.

Dla mnie używam SceneBuilder, tak jak to opisywałeś i potrzebowałeś szerokości i wysokości tego. Tworzę niestandardowe formanty, więc dziwne było, że nie zrobiły tego automatycznie, więc tak to zrobić, jeśli trzeba.

Mogłem też użyć setWidth()/setHeight() z Stage.

0

Po ustawieniu nie można ustawić rozmiaru Scene.

Ustawienie rozmiaru Stage oznacza ustawienie rozmiaru okna, które obejmuje rozmiar dekoracji. Więc Scene ma mniejszy rozmiar, chyba że Stage jest bez ozdób.

Moje rozwiązanie jest obliczenie wielkości dekoracji while inicjalizacji i dodać go do rozmiaru Stage podczas zmiany rozmiaru:

private Stage stage; 
private double decorationWidth; 
private double decorationHeight; 

public void start(Stage stage) throws Exception { 
    this.stage = stage; 

    final double initialSceneWidth = 720; 
    final double initialSceneHeight = 640; 
    final Parent root = createRoot(); 
    final Scene scene = new Scene(root, initialSceneWidth, initialSceneHeight); 

    this.stage.setScene(scene); 
    this.stage.show(); 

    this.decorationWidth = initialSceneWidth - scene.getWidth(); 
    this.decorationHeight = initialSceneHeight - scene.getHeight(); 
} 

public void resizeScene(double width, double height) { 
    this.stage.setWidth(width + this.decorationWidth); 
    this.stage.setHeight(height + this.decorationHeight); 
} 
Powiązane problemy