Java 访问fxml控制器';来自fxml加载程序的s方法

Java 访问fxml控制器';来自fxml加载程序的s方法,java,javafx,scene,Java,Javafx,Scene,我想做的是,如果场景(应用程序的窗口)的大小被调整,我想相应地调整窗口内的内容。我已经张贴了我的代码,我已经做了到现在为止 装载机类 public class ResizingButtons extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("FXMLDocumen

我想做的是,如果场景(应用程序的窗口)的大小被调整,我想相应地调整窗口内的内容。我已经张贴了我的代码,我已经做了到现在为止

装载机类

public class ResizingButtons extends Application {

@Override

public void start(Stage stage) throws Exception {

    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    scene.widthProperty().addListener(new ChangeListener<Number>() {

        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
            try{
            System.out.println("Scene Width Property is " + scene.getWidth());
            }
            catch(Exception e){
                System.out.println("Error in width listener of scene" +e.getMessage());
            }
        }
    });   
}

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

调整窗口大小后,我想访问控制器类的changeBtnSize()方法。

您可以从
fxmloader
获取控制器实例。重构代码,如下所示:

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); // Use loader instance
    Parent root = loader.load();
    FXMLDocumentController controller = loader.getController(); // Now you have controller refference here
    //add your listener, feel free to use your controller inside listener implementation
}

现在,每当我尝试在fxml组件中进行更改时,从loader类的changeListener()方法,它会给出null
code
scene.widthProperty().addListener(new changeListener(){@Override public void changed(ObservalEvalue当我试图从loader类的change listener调用controller的方法时,它执行print语句,但如果我试图在fxml scene.widthProperty().addListener的组件中进行任何更改,它会给出null(new ChangeListener(){@Override public void changed(ObservableValue@viper“提供空值”-这是什么意思?控制器实例为空?如果我试图在组件中进行任何更改,是否会得到
NullPointerException
?”-您想做什么?您如何更改组件?它只在catch块中给出一个“null”字。更改意味着Buton和panels@viper您是否尝试调试代码?在try块中停止执行并检查
控制器是否不为null?或在catch块中停止并检查接收ex的类型避孕?
@Override
public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); // Use loader instance
    Parent root = loader.load();
    FXMLDocumentController controller = loader.getController(); // Now you have controller refference here
    //add your listener, feel free to use your controller inside listener implementation
}