Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么孩子是空的?JavaFX_Java_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

为什么孩子是空的?JavaFX

为什么孩子是空的?JavaFX,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,我有一个javaFX的小代码。 我想在画布上画画,但我有一些初学者的问题,我真的不太理解javaFX 这是我的Main.java package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { Con

我有一个javaFX的小代码。 我想在画布上画画,但我有一些初学者的问题,我真的不太理解javaFX

这是我的
Main.java

package sample;

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

public class Main extends Application {
Controller controller;
    @Override
    public void start(Stage primaryStage) throws Exception{
        controller= new Controller();
        controller.Pane = FXMLLoader.load(getClass().getResource("sample.fxml"));
        System.out.printf("kk"+controller.canvas.isResizable());
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(controller.Pane, controller.Pane.getPrefWidth(), controller.Pane.getPrefHeight()));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
这是sample.FXML


对于controller.java,只有画布和窗格声明

我的问题:

  • Pane是父对象,canvas是执行FXMLloader.load等操作后的子对象,Pane不为null,但方法start中的子对象为null(外部类似于按钮事件,子对象不为null)为什么子对象为null?
  • 要使画布可调整大小,没有任何方法可以做到这一点,唯一的解决方案是从
    canvas
    扩展到
    @Override
    method
    isresizeable
    使其成为
    true
    。但是
    Canvas
    如果我这样做,我会从FXML获得它
    Canvas MyCanvas=new canvasResizeable()
    这不管用,我不知道为什么。
    是否有一种类似android的方法来制作例如
    canvas=(canvas)findbyid(FXML.id.canvas)(类似的东西)
  • 我的最后一个问题是,我们如何改变画布的颜色?没有方法可以做到这一点


    我很抱歉,如果我的问题已经被不同的人问到了为什么,我在谷歌搜索了这么多关于javaFX的文档。不应该直接创建FXML控制器。它将由
    fxmloader
    为您初始化:

    public class Main extends Application {
        @Override
        public void start(Stage primaryStage) throws Exception{
            FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
            Pane root = loader.load(); // controller was initialized
            controller = loader.getController();
    
            primaryStage.setTitle("Hello World");
            primaryStage.setScene(new Scene(root, root.getPrefWidth(), root.getPrefHeight()));
            primaryStage.show();
        }
    
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    您可以在Oracle教程中找到更多详细信息:

    非常感谢您的回答:D