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
}