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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现