2012-01-09 45 views
5

Tôi đã cố gắng đặt chiều rộng và chiều cao của cảnh bên ngoài hàm tạo và không có kết quả. Sau khi xem qua API Scene, tôi đã thấy một phương pháp cho phép bạn có được chiều cao và chiều rộng tương ứng nhưng không phải là phương pháp để đặt phương thức ..: s (thiết kế lỗ hổng có thể).Đặt chiều rộng và chiều cao của cảnh

Sau khi nghiên cứu sâu hơn, tôi đã xem qua các số SceneBuilder và tìm thấy các phương pháp có thể sửa đổi chiều cao và chiều rộng. Tuy nhiên, tôi không biết cách áp dụng nó cho đối tượng cảnh đã được tạo hoặc cách tạo đối tượng SceneBuilder có thể được sử dụng thay cho đối tượng cảnh.

Trả lời

8

Khi bạn đã tạo Scene và gán nó cho Stage, bạn có thể sử dụng Stage.setWidthStage.setHeight để thay đổi cả kích thước sân khấu và cảnh cùng một lúc.

SceneBuilder không thể áp dụng cho đối tượng đã tạo, nó chỉ có thể được sử dụng để tạo cảnh.

+0

Ok, Cảm ơn bạn. Đó là một con đường mà tôi không nghĩ đến việc sử dụng hoặc không biết tôi có thể sử dụng. Cảm ơn rất nhiều, tôi sẽ thử nó và cho bạn biết làm thế nào nó đi. – Chika

+0

Cảm ơn rất nhiều vì điều đó. Nó hoạt động đề nghị của bạn là hoàn hảo, tuy nhiên một câu hỏi nữa. Tôi có thể xóa một cảnh hay sân khấu đúng không? Làm thế nào tôi có thể làm điều này xảy ra? – Chika

+1

đến giai đoạn "rõ ràng" chỉ định một cảnh trống cho nó: 'stage.setScene (new Scene());'. Để xóa scene, đặt root trống: 'scene.setRoot (new Group());' hoặc xóa tất cả các con của root: 'scene.getRoot(). GetChildren(). Clear();' –

2

Tôi chỉ muốn đăng câu trả lời khác cho những người có thể có vấn đề tương tự như tôi.

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

Không có setWidth() hoặc setHeight(), và tài sản là ReadOnly, nhưng nếu bạn nhìn vào

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. 

Như bạn có thể thấy, đây là nơi bạn có thể thiết lập chiều cao và chiều rộng nếu bạn cần phải.

Đối với tôi, tôi đang sử dụng SceneBuilder, giống như bạn mô tả bạn đang làm và cần chiều rộng và chiều cao của điều đó. Tôi đang tạo các điều khiển tùy chỉnh, vì vậy thật lạ khi nó không tự động làm điều đó, vì vậy đây là cách thực hiện nó nếu bạn cần.

Tôi cũng có thể sử dụng setWidth()/setHeight() từ số Stage.

0

Có vẻ như không thể đặt kích thước của Scene sau khi đã được tạo.

Đặt kích thước của Stage có nghĩa là đặt kích thước của cửa sổ, bao gồm kích thước của trang trí. Vì vậy, Scene có kích thước nhỏ hơn, trừ khi Stage là undecorated.

Giải pháp của tôi là để tính toán kích thước của trang trí trong khi khởi tạo và thêm nó vào kích thước của Stage khi thay đổi kích thước:

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); 
} 
Các vấn đề liên quan