您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java程序设计案例教程-ch10
Java程序设计案例教程第10章JavaFXGUI编程第10章JavaFXGUI编程第1页本章概述本章的学习目标主要内容Java程序设计案例教程第10章JavaFXGUI编程本章概述上一章就提到过,JavaFX是Java的下一代客户端平台和GUI框架。预计在将来的某个时候,JavaFX会取代Swing,成为Java中最受欢迎的GUI。它提供了一个强大、流线化且灵活的框架,简化了现代的、视觉效果出色的GUI的创建。本章将介绍如何创建JavaFX应用程序,包括JavaFX的应用程序框架,以及JavaFX常用控件的使用,效果和变换,以及JavaFX菜单等内容,通过本章的学习,读者应掌握JavaFX应用程序的工作原理和启动过程,能够编写简单的JavaFX应用程序。第2页Java程序设计案例教程第10章JavaFXGUI编程本章的学习目标了解JavaFX应用程序的框架掌握Application类及方法了解Stage和Scene在JavaFX中的作用理解JavaFX中的节点和场景图掌握JavaFX应用程序的启动方法了解JavaFX的常用组件了解JavaFX中的效果和变换第3页Java程序设计案例教程第10章JavaFXGUI编程第4页主要内容10.1JavaFX概述10.2JavaFX控件10.3效果和变换10.4JavaFX菜单10.5本章小结10.6思考和练习Java程序设计案例教程第10章JavaFXGUI编程10.1JavaFX概述随着移动互联网的飞速发展,移动应用变得越来越重要,而且这类应用程序往往要求GUI能有让人眼前一亮的地方。这就促使了JavaFX的问世。JavaFX是一个庞大的系统,预计在未来几年中,JavaFX会取代Swing应用到新项目中。任何Java程序员都不应该忽视JavaFX。JavaFX框架具有Swing的所有优点。例如,JavaFX是轻量级的,并且支持MVC架构。我们前面学习的使用Swing创建GUI的很多知识,在概念上也可以应用到JavaFX。第5页Java程序设计案例教程第10章JavaFXGUI编程JavaFX包最初的JavaFX基于一种脚本语言JavaFXScript。但是,JavaFXScript后来被弃用了。从JavaFX2.0开始,JavaFX开始完全用Java编写,并提供了一个全面的API。从JDK7,update4开始,JavaFX就与Java捆绑在一起。JavaFX的最新版本是JavaFX8,它与JDK8捆绑在一起(版本号8是为了与JDK版本一致,所以跳过了3~7)。JavaFX的元素包含在以javafx开头的一些包中。安装好JDK后,在安装目录中会有一个名为javafx-src.zip的压缩文件,其中存放的是JavaFX库的Java源文件。在JavaFXAPI库中有几十个JavaFX包。比较常用的如:javafx.application、javafx.stage、javafx.scene和javafx.scene.layout等。第6页Java程序设计案例教程第10章JavaFXGUI编程JavaFX应用程序框架JavaFX应用程序必须是javafx.application包中Application类的子类。因此,应用程序类必须扩展Application类。Application类定义了3个可以被重写的生命周期方法:►voidinit():当应用程序开始执行时,调用init()方法。该方法用于执行各种初始化工作。它不能用于创建舞台或构建场景。如果不需要进行初始化,那么不需要重写这个方法,因为默认会提供空版本的init()方法。►abstractvoidstart(StageprimaryStage):start()方法在init()方法之后调用。这是应用程序开始执行的地方,可以用来构造和设置场景。它接受一个Stage类型的参数。这是由运行时系统提供的舞台,即主舞台。我们的应用程序必须实现这个抽象方法。►voidstop():应用程序终止时,会调用stop()方法。在这里可以执行清理和关闭工作。如果不需要执行这些操作,可以不重写该方法。第7页Java程序设计案例教程第10章JavaFXGUI编程Stage和SceneJavaFX采用的核心比喻是舞台。正如现实中的舞台表演,舞台是有场景的。舞台定义了一个空间,场景定义了在该空间内发生了什么。换句话说,舞台是场景的容器,场景是组成场景的元素的容器。因此,所有JavaFX应用程序都具有至少一个舞台和至少一个场景。这些元素在JavaFXAPI中由Stage和Scene类封装。要创建JavaFX应用程序,至少需要在一个Stage中添加一个Scene对象。Stage是顶级容器。所有JavaFX应用程序都自动能够访问一个Stage,叫做主舞台。当JavaFX应用程序启动时,运行时系统会提供主舞台(start方法的参数)。尽管还可以创建其他舞台,但是对于许多应用程序,主舞台是唯一需要的舞台。Scene是组成场景的元素的容器。这些元素包括控件(如命令按钮和复选框)、文本和图形。为了创建场景,需要把这些元素添加到一个Scene实例中。第8页Java程序设计案例教程第10章JavaFXGUI编程节点和场景图场景中的单独元素叫做节点。例如,命令按钮控件就是一个节点。不过,节点也可以由一组节点组成。而且节点还可以有子节点,具有子节点的节点叫做父节点或分支节点。没有子节点的节点叫做终端节点或叶子。场景中所有节点的集合创建出所谓的场景图,场景图又构成了树。场景图中有一种特殊的节点是根节点。根节点是顶级节点,也是场景图中唯一没有父节点的节点。因此,除了父节点以外,其他所有节点都有父节点,而且所有节点都直接或者间接地派生自根节点。所有节点的基类是Node。有一些类直接或间接地派生了Node类,如Parent、Group、Region和Control等。第9页Java程序设计案例教程第10章JavaFXGUI编程布局JavaFX提供了几个布局窗格,用于管理在场景中放置元素的过程。例如,FlowPane类提供了流式布局,GridPane类支持基于网格的行列布局。除此之外,还有BorderPane,它类似于AWT中的BorderLayout布局。布局窗格类位于javafx.scene.layout包中。第10页Java程序设计案例教程第10章JavaFXGUI编程启动JavaFX应用程序要启动一个独立的JavaFX应用程序,需要调用Application类的launch()方法。它有如下两个版本:►publicstaticvoidlaunch(String...args)►publicstaticvoidlaunch(Class?extendsApplicationappClass,String...args)本书用到的是第一个版本,其中,args是一个指定了命令行参数的字符串列表,可以为空。调用launch()会开始构造应用程序,然后调用init()和start()方法。直到应用程序终止,launch()方法才会返回。第一个版本的launch()方法会启动调用它的Application的子类;第二个版本的launch()方法允许指定启动另一个类,而不是其调用类。第11页Java程序设计案例教程第10章JavaFXGUI编程JavaFX事件处理JavaFX事件的基类是javafx.event包中的Event类。该类继承了java.util.EventObject类,这意味着JavaFX事件与其他Java事件共享相同的基本功能。Event类有几个子类,如ActionEvent类用来处理按钮产生的动作事件。JavaFX的事件处理实质上也是委托事件模型。为处理事件,首先必须注册处理程序,作为事件的监听器。事件发生时,会调用监听器。监听器必须响应事件,然后返回。在这一点上,JavaFX的事件管理与Swing事件很类似。第12页Java程序设计案例教程第10章JavaFXGUI编程JavaFX事件处理事件是通过实现EventHandler接口处理的,该接口也包含在javafx.event包中。它是一个泛型接口,该接口定义了handle()方法,它接受事件对象作为参数,如下所示:►voidhandle(TeventObj)其中,eventObj是产生的事件。通常,事件处理程序是通过匿名内部类来实现。在处理事件时,可以调用继承自java.util.EventObject的getSource()方法来获得事件源。第13页Java程序设计案例教程第10章JavaFXGUI编程一个简单的JavaFX应用程序JavaFX提供了丰富的控件供应用程序使用。本节将创建一个简单的JavaFX应用程序,它包含一个开关按钮、一个普通按钮和一个标签控件,这几个控件都是比较简单且最常使用的控件。将控件添加到场景中的方法是:首先对场景图的根节点调用getChildren()方法。该方法返回一个ObservableListNode形式的子节点列表。然后通过该子节点列表的add()或addAll()方法,把一个或多个控件添加到这个列表中。第14页Java程序设计案例教程第10章JavaFXGUI编程一个简单的JavaFX应用程序继承了Application类,并重写了start()方法在控制台窗口中回输出如下信息:通过launch方法启动应用程序.►执行init方法.►执行start方法.关闭窗口时,控制台中会继续输出下面的信息:►执行stop方法.当然,在真正的程序中,生命周期方法一般不会使用System.out输出信息。这里只是为了演示每个方法的调用时间。第15页Java程序设计案例教程第10章JavaFXGUI编程一个简单的JavaFX应用程序在本例的main()方法中,通过调用launch()方法来启动应用程序,并把main()方法的args参数传递给launch()方法。这是比较常见的做法,也可以传递一组不同的参数给launch()方法,甚至根本不传递参数。应用程序启动后,JavaFX运行时系统首先调用init()方法,然后执行start()方法,在start()方法中创建最初的场景,并将其设置给主舞台(start()方法的参数)。通过主舞台的setTitle()方法可以设置舞台的标题:►myStage.setTitle(一个JavaFX应用程序);第16页Java程序设计案例教程第10章JavaFXGUI编程一个简单的JavaFX应用程序下面的代码是使用根节点来构造一个Scene对象:►ScenemyScene=newScene(rootNode,300,100);然后将myScene设为myStage的场景:myStage.setScene(myScene);随后的几行代码是创建几个控件,并为按钮控件添加事件处理程序,通过匿名内部类来实现EventHandler接口,在handle()方法内,设置标签的文本。设置好事件处理程序后,调用addAll()方法将response标签和两个按钮添加到场景中:►rootNode.getChildren().addAll(togBtn,btn,response);addAll()方法向调用父节点添加一个节点列表。当然,也可以通过调用add()方法3次来添加这些节点,但是在这里,使用addAll()更加方便。最后,使用show()方法显示舞台及其场景。第17页Java程序设计案例教程第10章JavaFXGUI编程第18页主要内容10.1JavaFX概述10.2JavaFX控件10.3效果和变换10.4JavaFX菜单10.5本章小结10.6思考和练习Java程序设计案例教程第10章JavaFXGUI编程10.2JavaFX控件在【案例10-1】中,用到了3个控件:标签、普通按钮和开关按钮,这些控件都包含在javafx.scene.control包中。因为JavaF
本文标题:Java程序设计案例教程-ch10
链接地址:https://www.777doc.com/doc-4575143 .html