javafx中controller与fxml及参数传值-1-2
参考自: https://www.bilibili.com/video/BV1tt4y1W7nY?spm_id_from=333.788.videopod.sections&vd_source=137b7db2f57c3cb63d8af247fefc66e0

一、去掉controller及其应用场景
方法1:获取全部子节点集合,根据索引查找组件,缺点是:不容易弄清节点间关系
定义test.fxml

在程序中加载fxml,根据节点关系调用控件进行操作 ,加载后AnchorPane对应root。

方法2、通过css选择器选择组件(style-class,Node id ..)
通过组件选择器查找,如TextField、Button等,不推荐使用

使用css选择器如文本框的默认css选择器:.text-field 或 定义css的id选择器如:#cssBtn


方法3、通过fxid来查找组件或者其他区具有fxid的对象

定义组件文本框fx:id为tf,组件按钮fx:id为btn

二、controller有参构造器
方法1、setcontrollerFactory来设置控制器
说明:若需自定义控制器,需确保FXML文件中不设置fx:controller属性,或通过setControllerFactory()覆盖其默认行为
fxml页面中已经引入了控制器,fxmlloader加载时默认执行了初始化构造,再次通过 fxmlLoader.setController(new MainController1("起飞"));传递参数构造会出现错误。

通过工厂方式传参 fxmlLoader.setControllerFactory(t-》new MainController1("起飞"));覆盖其默认行为,正确远行

通过controller类实现接口Initializable重载initialize(url locatio,resourcebundle)实现初始化,该方法过时了。

建议方式,可以通过注解方式处理,实现同样效果,controller类不再实现接口Initializable,
可以在scenebuilder中打开fxml文件,菜单--view-- show sample skeleton 如下
public class MainbbController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
void initialize() {
}
}


初始化正确传值
方法2、当布局文件没有指定controller的时候,可以使用setcontroller来指定一个控制器
布局文件中不指定controller

使用fxmlLoader.setController(new MainController1("起飞"));方法传参

正确处理

应用,处理网页调用,在application.gethostservices().showdocument("https://www.baidu.com");



三、多controller,多stage通信与传值
javafx中controller与fxml及参数传值-3
四、事件总线eventbus
浙公网安备 33010602011771号