如何既使用JavaFX场景生成器,又可以选择使用代码设计root?

如何既使用JavaFX场景生成器,又可以选择使用代码设计root?,java,javafx,fxml,scenebuilder,scene,Java,Javafx,Fxml,Scenebuilder,Scene,我想尝试一下SceneBuilder,因为手动(在代码中)将对象居中很麻烦。不幸的是,当我使用FXML时,root是从我这里获取的,所以我不能将group设置为root。我想做的是在画布上操作(添加到根组),同时仍然让SceneBuilder FXML文件工作 例如,当我设置根sceneBuilder FXML文件时,我无法在代码中向其添加精灵。反之亦然,当我将root设置为group时,应用程序没有使用FXML文件 如何连接这些?下面是使用组作为根的代码。我添加了sprite,它在SceneB

我想尝试一下SceneBuilder,因为手动(在代码中)将对象居中很麻烦。不幸的是,当我使用FXML时,root是从我这里获取的,所以我不能将group设置为root。我想做的是在画布上操作(添加到根组),同时仍然让SceneBuilder FXML文件工作

例如,当我设置根sceneBuilder FXML文件时,我无法在代码中向其添加精灵。反之亦然,当我将root设置为group时,应用程序没有使用FXML文件

如何连接这些?下面是使用组作为根的代码。我添加了sprite,它在SceneBuilder中不可见。此外,在SceneBuilder中创建的按钮在编译应用程序后不可见

代码:


您从未将
root
添加到组
rootx
。此外,名称必须表示有意义的内容。最后,您应该为FXMLDocument创建一个控制器类。您可以让它扩展您想要的根本原因,例如“BorderPane”,并在控制器类的
initialize()
方法中执行任何您想要的操作。@GOXR3PLUS Mate我不知道您的意思。
rootx.getChildren().add(root)
?@James\D感谢您的回复(再次),但这并不能解决我的问题。Im从代码中获取包含对象的窗口或fxml场景生成器窗口(而不是将其放在一起)确定而不是分组使用边界窗格进行测试。将根添加到BorderPane的顶部,将画布添加到BorderPane的中心。发生了什么?您从未将
root
添加到组
rootx
。此外,名称必须表示有意义的内容。最后,您应该为FXMLDocument创建一个控制器类。您可以让它扩展您想要的根本原因,例如“BorderPane”,并在控制器类的
initialize()
方法中执行任何您想要的操作。@GOXR3PLUS Mate我不知道您的意思。
rootx.getChildren().add(root)
?@James\D感谢您的回复(再次),但这并不能解决我的问题。Im从代码中获取包含对象的窗口或fxml场景生成器窗口(而不是将其放在一起)确定而不是分组使用边界窗格进行测试。将根添加到BorderPane的顶部,将画布添加到BorderPane的中心。会发生什么?
package zegelardo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.animation.AnimationTimer;
import javafx.event.EventHandler;
import javafx.scene.input.KeyEvent;
import javafx.scene.control.Button;
import java.util.ArrayList;
import java.util.Iterator;

public class Zegelardo extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));


        Group rootx = new Group();
        Scene scene = new Scene(rootx);
        scene.setFill(Color.BLACK);

        stage.setScene(scene);
        stage.setTitle("Zegelardo");

        Sprite tlo = new Sprite();
        tlo.setImage("test55.gif");
        tlo.setPosition(0, 0);



        Canvas canvas = new Canvas( 800, 400 );

        rootx.getChildren().add(canvas);

           GraphicsContext gc = canvas.getGraphicsContext2D();

        // gc.clearRect(0, 0, 1000,800);
               // briefcase.render( gc );

                tlo.render(gc);
       // Group leaf = new Group();
       // root.getChildren().add(canvas);
       // Canvas canvas = new Canvas( 800, 400 );
        //leaf.getChildren().add( canvas );

        stage.show();
    }

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

}