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

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

1.通过Controller Class来处理事件

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

如下图:

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

如下图所示:

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

[java] view plaincopy
  1. import javafx.fxml.FXML;
  2. import javafx.scene.control.Button;
  3. import javafx.event.ActionEvent;
  4. import javafx.scene.control.Label;
  5. public class MainLayoutController {
  6. @FXML
  7. private Button mButton;
  8. @FXML
  9. private Label mLabel;
  10. @FXML
  11. public void onButtonClick(ActionEvent event) {
  12. mLabel.setText("HelloWorld");
  13. }
  14. }

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

我们的Main类如下:

[java] view plaincopy
  1. import javafx.application.Application;
  2. import javafx.fxml.FXMLLoader;
  3. import javafx.stage.Stage;
  4. import javafx.scene.Parent;
  5. import javafx.scene.Scene;
  6. public class Main extends Application {
  7. @Override
  8. public void start(Stage primaryStage) {
  9. try {
  10. Parent parent = FXMLLoader.load(getClass().getResource("MainLayout.fxml"));
  11. Scene scene = new Scene(parent,300,200);
  12. scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
  13. primaryStage.setScene(scene);
  14. primaryStage.show();
  15. } catch(Exception e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. public static void main(String[] args) {
  20. launch(args);
  21. }
  22. }

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

运行效果如下:

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

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

2.像Android一样处理事件

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

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

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

[java] view plaincopy
  1. import javafx.application.Application;
  2. import javafx.fxml.FXMLLoader;
  3. import javafx.stage.Stage;
  4. import javafx.scene.Parent;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.Button;
  7. import javafx.scene.control.Label;
  8. public class Main extends Application {
  9. @Override
  10. public void start(Stage primaryStage) {
  11. try {
  12. Parent parent = FXMLLoader.load(getClass().getResource("MainLayout.fxml"));
  13. Label label = (Label)parent.lookup("#mLabel");
  14. Button button = (Button)parent.lookup("#mButton");
  15. button.setOnAction(e ->{
  16. label.setText("HelloWorld JavaFX");
  17. });
  18. Scene scene = new Scene(parent,300,200);
  19. scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
  20. primaryStage.setScene(scene);
  21. primaryStage.show();
  22. } catch(Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. public static void main(String[] args) {
  27. launch(args);
  28. }
  29. }

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

运行效果如下:

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

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

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

文章转载:http://blog.csdn.net/ml3947

JavaFX之Controll用法相关推荐

  1. 总结常用的Javafx功能及用法(上)

    总结常用的Javafx功能及用法 什么是Javafx 一个窗口都有哪些内容 制作一个简单的窗口 一些方法 Stage scene Pane node(一般node同用的方法,这里用label举例) 关 ...

  2. 总结常用的Javafx功能及用法(下)

    总结常用的Javafx功能及用法 控件的绑定和监听 事件驱动编程 什么是事件驱动 创建一个点击移动事件 创建一个拖拽移动文件的事件 FXML布局 Scene Builder的使用 Controller ...

  3. arc lint java,JavaFX 类 Arc用法及代码示例

    Arc类是JavaxFX的一部分.圆弧类在指定的某些给定值上创建圆弧,例如圆弧的中心,起始角度,圆弧的长度(长度)和半径.弧形类扩展了形状类. 该类的构造函数是 Arc():创建弧类的空实例 Arc( ...

  4. 基于JavaFX实现的数据库学生管理系统

    0 前言 本博客所有内容和代码仅用来学习,无任何商用,如有侵权请联系我删除. 本文原创,创作不易,转载请注明!!! 源码如下: 度盘链接:https://pan.baidu.com/s/1M1nzoO ...

  5. 【Java】Java中Pair的使用

    做104. 二叉树的最大深度 这道题的时候用到了Pair,是DFS用栈来实现的时候. Pair类 Pair类在javafx.util 包中 import javafx.util.Pair; 用法 用键 ...

  6. (Java实现)图片合成GIF动图(“复古”Swing界面)

    1.项目简介 项目名称:pic2gif 项目实现:将选定的几张图片(支持jpg,png,bmp,gif等) 合成为一张gif图 关键字:图片处理,Java,Swing 2.项目结构 图片处理部分 Sw ...

  7. MFC Slider Controll的相关用法

    滑动控件是Windows中最常用的控件之一.一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控件,用于显示 ...

  8. VTL-vm模板的变量用法

    加载foot模块页 #parse("foot.vm") #foreach($item in $tables)  #set($strEnd = $item.Length - 1)   ...

  9. JavaFX打包工具(javafxpackager)

    2019独角兽企业重金招聘Python工程师标准>>> 首先创建一个JavaFX文件,Hello World package test;import javafx.applicati ...

最新文章

  1. 2020年数据科学领域4个最热门的趋势
  2. 你看的每一篇Nature论文,都是这样出炉的!
  3. 我的团队[六]———功夫在诗外
  4. 山石网科SG-6000-E5560配置SSL ***实例
  5. 虚拟机中使用Samba实现文件共享,并在win10上创建映射网络驱动器
  6. 电话骗术升级了,提高警惕! (转自公司内部新闻组,真人真事)
  7. [转]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
  8. 计算机科学分为几个部分,计算机由几部分组成各部分的功能是什么
  9. WordPress插件-WBOLT热门关键词推荐插件v1.3.0 Pro绿色版
  10. 如果用float实现居中
  11. 文本匹配开山之作--双塔模型及实战
  12. 图片夹_【第8期】EHS大咖答疑解惑吊运事故的罪魁祸首之一:钢丝绳夹!不看不知道!...
  13. java u盘检测工具,BadUSB测试记录
  14. OpenWRT(十一)LuCi开发(三)
  15. 华工历次数学实验源代码
  16. 京东扫描平台EOS—JS扫描落地与实践
  17. Fastformer论文解读
  18. 现实 虚拟世界_现实世界的规则引擎
  19. 一代爱国电脑天才,郭盛华的传奇一生
  20. Android TextView 如何判断是否已经省略

热门文章

  1. Perl 旁站查询(站长工具提取)
  2. Waves区块链-Swop.fi里的Share Token是什么?如何发挥作用?
  3. 实验篇---MPLS v+p+n + OSPF sham-link
  4. 欧姆龙FinsTcp通信详解(一)--PLC常用命令格式
  5. gitlab 拆分某项目的子项目到独立的git项目
  6. 如何将unitypackage文件导入到unity中?
  7. 用这个小工具轻松 get Mac 隐藏功能
  8. Redis主从、哨兵、 Cluster集群一锅端!
  9. node.js实现token验证——从数据库验证登录到redis存储
  10. 无线网络原理知识总结