2013-08-09 37 views
5

Làm cách nào để thêm nút mới vào Scene trong mã java khi Scene được tải ban đầu từ FXML? Tôi đã tải từ FXML như được hiển thị bên dướiJavaFX: Thêm nút mới vào Scene trong mã java khi Scene ban đầu được tải từ FXML

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 

Scene scene = new Scene(root, 1000, 600, Color.DODGERBLUE); 

Bây giờ, hãy nói làm cách nào để thêm nút vào cảnh trong mã Java?

Trả lời

10

Tôi không biết lý do đằng sau câu hỏi của bạn. Nếu những gì bạn muốn là chèn một số nút động trong quá trình khởi tạo ứng dụng hoặc cảnh, tôi khuyên bạn nên sử dụng initialize method tại bộ điều khiển của mình.

Phương pháp này phải được chú thích với @FXML và có chữ ký sau đây:

void initialize() 

Sau đó, bạn có thể tiêm container mà nút phải được chèn trên bộ điều khiển và thêm nút với nó:

@FXML 
HBox buttonBox // assuming your button container is a HBox 
... 

@FXML 
protected void initialize() { 
    buttonBox.getChildren().add(new Button("Click me!")); 
} 

Phương thức initialize được gọi sau khi các thành phần được xác định trong tệp FXML được tạo.

4

Dưới đây là một cách để làm điều này:

((VBox) root).getChildren().add(new Button("Java Button")); 

Đoạn trên giả định rằng các container hàng đầu theo quy định tại FXML của bạn là một VBox, nếu nó không phải là một VBox, chỉ cần bỏ nó vào bất cứ loại bạn có đã chọn.

Tôi tự hỏi làm thế nào tôi có thể xác định loại container khi chạy, vì vậy tôi có thể viết mã chung hơn.

Loại có thể là Pane, do đó việc truyền tới một ngăn sẽ hoạt động trong hầu hết các trường hợp. Sử dụng bố cục Pane làm cha mẹ thường được đề xuất cho hầu hết các tác vụ bố cục trong JavaFX.

+0

Cách tiếp cận này đơn giản hơn và hiệu quả với tôi. Tôi tự hỏi làm thế nào tôi có thể xác định loại container trong thời gian chạy, vì vậy tôi có thể viết một mã chung chung hơn. –

+0

instanceof xxx gốc hoặc sử dụng getClass() nên hoạt động để thử nghiệm hoặc sử dụng phản chiếu để tìm phương thức mong muốn? – tomasb