JavaFX:Main,Controller,FXML之间的参数传递
Controller获取FXML数据
【.fxml文件】
<Pane fx:controller = "sample.Controller">
<Button fx:id = "sample"> //设置fx:id属性,在根节点中设置 fx:controller属性
</Pane>
【Controller类】
@FXML Button sample; //通过@FXML标签获取相应的fx:id节点
Main,Controller之间的数据交换
Main类是通过.fxml文件中转来获取Controller类的数据的;
一般不会在Controller方向获取Main数据,因为Controller的加载是在Main之前的,所以Controller几乎无法获取Main的动态数据,只能获取Main的静态数据;
一般Main和Controller之间的数据交换方法是,通过Main获取Controller的一个实例对象,在Controller中将各种动态数据存放在某个bean中,(或者类私域中,并对外提供set、get方法),以下为了演示方便将数据存在Controller中;
【Main类】
public void start(Stage primaryStage){
FXMLLoader fxmlLoader = new FXMLLoadere(getClass().getResouce("sample.fxml").toString());
Parent root = fxmlLoader.load();
//如果使用 Parent root = FXMLLoader.load(...) 静态读取方法,无法获取到Controller的实例对象
Scene scene = new Scene(root,300,200);
Controller controller = fxmlloader.getController(); //获取Controller的实例对象
//传递primaryStage,scene参数给Controller
controller.setPrimaryStage(primaryStage);
controller.setScene(scene);
//传递参数并在Controller构建实例对象
controller.createMediaPlayer(url);
//获取Controller的动态对象;
MediaPlayer player = controller.getMediaPlayer();
player.play();
primaryStage.setTitle(...);
primaryStage.setScene(scene);
primaryStage.show();
}
【Controller类】
private Stage satge;
private Scene scene;
private MediaPlayer mediaPlayer;
public void initialize(){
.......
}
public void setStage(Stage stage){
this.stage = stage;
}
public void setScene(Scene scene){
this.scene = scene;
}
public void createMediaPlayer(String url){
mediaPlayer = new MediaPlayer(new Media(url));
}
public void getMediaPlayer(){
return this.mediaPlayer;
}