JavaFX之FXController详解

2023-11-18

  在JavaFX的UI开发中,FXController是个很重要的东西,主要是用于UI层和事件层分离。

 事实上,JavaFX使用FXML来开发UI界面,有多种形式来监听我们的事件,下面我们来细看。

 1.通过Controller Class来处理事件

 首先我们创建一个简单的界面,包含一个Button和一个Label。

 如下图:

 

  Label的fx:id设置为mLabel,Button的fx:id设置为mButton,同时将Button的onAction设置为onButtonClick。

  如下图所示:


  然后我们创建一个MainController类,写下如下代码:

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.event.ActionEvent;
import javafx.scene.control.Label;

public class MainLayoutController {
	@FXML
	private Button mButton;
	@FXML
	private Label mLabel;
	
	@FXML
	public void onButtonClick(ActionEvent event) {
		mLabel.setText("HelloWorld");
	}
}

  记住,我们需要在FXML的最上层添加fx:controller = "" 指向自己的MainController类(带包名)。

  我们的Main类如下:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;


public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			Parent parent = FXMLLoader.load(getClass().getResource("MainLayout.fxml"));
			Scene scene = new Scene(parent,300,200);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

  通过FXMLLoader加载FXML,并添加到Scene里面。

  运行效果如下:


  当我们点击按钮的时候,文本内容变成HelloWorld。

  这个就是我之前的文章中曾经讲过的事件方式。


  2.像Android一样处理事件

  接下来,我们来看看另外一种处理事件的方式。

  事实上,JavaFX提供类似于Android的一些方法,我们可以通过fx:id来查找指定的控件,并通过代码实现我们的事件。

  我们将上面的Main方法改动一下如下:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;


public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			Parent parent = FXMLLoader.load(getClass().getResource("MainLayout.fxml"));
			Label label = (Label)parent.lookup("#mLabel");
			Button button = (Button)parent.lookup("#mButton");
			button.setOnAction(e ->{
				label.setText("HelloWorld JavaFX");
			});
			Scene scene = new Scene(parent,300,200);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}

  我们通过lookup根据fx:id来查找控件,并添加事件处理。

  运行效果如下:


  大家可以明显看见,我们通过lookup查找到控件后,添加的事件覆盖了FXController中的事件。

  这就是另外一种类似Android的查找控件-添加事件的模式,可以根据自己的需要酌情处理。


  另外在e(fx)clipse 1.1版本里面,已经可以像Nebeans一样,通过fxml自动生成FXController了,还是非常的方便的。


  本文章为个人原创,版权所有,转载请注明出处:http://blog.csdn.net/ml3947。另外我的个人博客:http://www.wjfxgame.com. 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX之FXController详解 的相关文章

随机推荐

  • Java面向对象 - 文件类

    文章目录 第4关 图片查看器 挑战任务 答案 第4关 图片查看器 挑战任务 本关任务 小明想要开发一个图片查看器 但是他想只显示文件夹下所有图片类型的文件 你来帮小明实现这个功能吧 答案 代码如下 示例 package step4 impo
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • systemd和initd添加开机自启服务

    一 systemd Systemd 就是为了解决这些问题而诞生的 它的设计目标是 为系统的启动和管理提供一套完整的解决方案 使用了 Systemd 就不需要再用init了 Systemd 取代了initd 成为系统的第一个进程 PID 等于
  • LitJson的使用教程

    下载LitJson dll 放进你的工程 序列化 public static void SaveData string FileName Assets Data Archice json StreamReader reader File O
  • 开发日志:微信公众号网页开发的调试工具

    在这里记录一下开发时有用到的一些工具 VConcole调试工具 手机端的H5调试工具 http debugx5 qq com
  • 14-数据结构-有序链表排序

    问题 给你一个链表 然后去进行排序 并输出 思路 排序时 类似于冒泡排序 这里则定义两个链表指针 一个指向第一位 一个指向第一位的后一位 由于需要排序的是数据 因此定义一个中间变量 int temp 用于后面的数据域比较排序 两层循环 外循
  • ChatGPT指令大全(中文版)

    文章目录 ChatGPT指令大全 中文版 生活相关 充当讲故事的人 充当旅游指南 扮演脱口秀喜剧演员 充当抄袭检查员 担任厨师 充当 电影 书籍 任何东西 中的 角色 学习相关 充当 ChatGPT 提示生成器 充当维基百科页面 充当英语发
  • 微信小程序开发——入门-01(附带练手小程序)

    目录标题 一 项目展示 二 项目gitee开源地址 三 基础 一 项目结构 二 全局配置 app json 三 页面配置 四 微信搜索索引到小程序 sitemap json 五 数据绑定 六 场景值 用户进入小程序的方式 七 注册小程序 a
  • JMeter入门教程(10) --函数助手

    文章目录 1 CSVRead 2 Random 3 RandomString 4 RandomDate 5 time 在JMeter的选项菜单中有一个 函数助手对话框 点击打开 函数助手 对话框 使用函数助手 我们可以从 选择一个功能 下拉
  • SQL:将表中一列拆成两列

    计算tableA表中type列有两种类型 计算每个id的每种类型的count和 id type count 1 1 10 2 2 5 1 1 8 4 2 9 方法 select id sum case when type 1 then co
  • unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据

    这里使用的是unity2020 1 对于unity编辑器开发也不是很了解 这方面的教程也不多 也是慢慢摸索的 效果显示 首先简单 介绍下Unity编辑器开发 1 Editor下打开新窗口需要继承EditorWindow 然后使用获取窗口即可
  • Linux系统Word转换PDF,文档字体乱码不显示问题解决。

    最近在做在线预览office文档功能 遇到的问题在这里记录一下 在用unoconv做文档转换时 发现中文转换乱码 找到最多的办法就是把 windows 下的字体全部拷贝到Linux字体库中并使之生效 1 首先windows 字体库的路径 C
  • 信息系统项目管理师(北京)——拿证实践总结

    目录 一 过程概述 二 经验分享 1 关于报班 2 关于教材 3 关于上午选择题 4 关于下午计算题 5 关于下午论文 6 关于其他杂七杂八小经验 三 证书用途总结 一 过程概述 2022年听说可以个税抵扣3600元 决定为了这笔大款考一个
  • 抖音小程序实践一:申请&初始化

    一 官方文档与实践 抖音小程序是什么 从官方视频了解 从2022年开始 字节跳动就开始火力全开的与知名企业合作 推动抖音小程序的孵化 然后逐步开放普通企业争相进入抖音小程序领域 来分一分流量的红利 巨量 星图 抖 一系列配套的推流渠道也都接
  • PCL调错(2):VTK报错

    为了解决这两个问题 一共做了两步操作 第一 百度搜索结果是说我的lib库连接不对 就是VTK附加依赖项没有添加完整 比如把vtkRenderingOpenGL lib库添加进去 所以又重新把vtk下的lib库都导入一遍 有一种方法 在cmd
  • Embedded Linux Conference schedule announced, several talks from Free Electrons

    本文转载至 http free electrons com blog elc 2015 schedule The schedule for the upcoming Embedded Linux Conference which takes
  • ​ Java输入一个字符串,然后把这个字符串反转输出。

    import java util Scanner public class Main public static void main String args Scanner scanner new Scanner System in Str
  • Eureka搭建服务报错 StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[] failed to start

    在搭建eureka服务端时 配置依赖都没问题 结果报了StandardEngine Tomcat StandardHost localhost TomcatEmbeddedContext failed to start 详细如下 org s
  • openCV图像读取和显示

    文章目录 一 imread 二 namedWindow 三 imshow include
  • JavaFX之FXController详解

    在JavaFX的UI开发中 FXController是个很重要的东西 主要是用于UI层和事件层分离 事实上 JavaFX使用FXML来开发UI界面 有多种形式来监听我们的事件 下面我们来细看 1 通过Controller Class来处理事