如何在JavaFX中组合FXML文件和组?

时间:2015-10-17 12:32:13

标签: java javafx-2 javafx-8 fxml

所以我为一个我正在为学校制作的小游戏制作了一个FXML文件,它里面有一些按钮和标签,它有自己的控制器。现在我制作了一组矩形,并希望将它添加到与fxml文件相同的场景中。

button.getParent().getChildren().add(group);

我在这里写的代码不起作用。有人想知道如何在fxml文件中添加组或只是在场景中渲染它吗?

在2个不同的场景中渲染fxml和组确实有效,所以没有错误。

编辑:

申请类:

package retris;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author Arno Vandersmissen, Casper Vranken, Rani Vanhoudt
 */
public class Retris extends Application {

    private Stage stage;

    @Override
    public void start(Stage stage) throws Exception {

        this.stage = stage;

        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("FXMLRetris.fxml")); 
        Parent root = loader.load();

        FXMLRetrisController controller = loader.getController();

        controller.playMusic();

        stage.setOnCloseRequest(e -> {
            e.consume();
            FXMLConfirmController confirm= new FXMLConfirmController();
            if(confirm.close("Close?")){
                Platform.exit();
            }
        });

        Scene scene = new Scene(root);

        stage.setTitle("Retris");
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}

1 个答案:

答案 0 :(得分:1)

Scene一次只能显示一个Parent。您希望在GUI中显示的内容将包含在Parent中。假设,正如您在评论中所建议的那样,您希望在运行时更新该父级,您需要引用应包含group of rectangles的父级子级。

让我们说fxml文件的根元素是AnchorPane,并且您还想将group of rectangles添加到该根目录。在.fxml文件中,您需要一个fx:id标记<AnchorPane fx:id="myRoot">,这允许您使用@FXML注释将元素注入控制器类。

public class MyController {
    @FXML private AnchorPane myRoot;

    @FXML private void createAndAddRectangles {
        /**myRoot is already instantiated. you can simply add nodes to it at runtime 
        by using onAction="createAndAddRectangles" tag on a button in your .fxml file.**/
    }
}