java fx 教程_JavaFX快速入门
1- 前提条件
在本文中,将学习如何在 Eclipse IDE 开发和执行JavaFX编程。
e(fx)eclipse
e(fx)eclipse是一组工具和必要的库,它们帮助您执行JavaFX编程,确保您已经作为插件将其安装在eclipse上了。 如果未安装e(fx)eclipse,可以在以下链接查看安装指南:
JavaFX Scene Builder
JavaFX Scene Builder是一种可视化设计工具,它允许通过拖放快速创建应用程序界面。 并且代码创建为XML格式的文件。 这是一个选项,为了执行JavaFX编程,最好也应该安装它。
如果还未安装JavaFX Scene Builder,可以在以下链接查看说明:
2-创建Hello World项目
打开Eclipse,并在Eclipse中选择:
File -> New -> Others..
创建一个项目名称为:HelloJavaFx,如下图中所示 -
项目创建成功以后,如下图中所示 -
还创建了Hello World示例代码,如下所示 -
package application
import javafx.application.Application
import javafx.stage.Stage
import javafx.scene.Scene
import javafx.scene.layout.BorderPane
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane()
Scene scene = new Scene(root,400,400)
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)
}
}
首先,让我们确保运行Hello World例子成功。 右键单击主类(Main)并选择:
Run As -> Java Application
JavaFX的Hello World应用正在运行,结果是一个空白的界面,如下:
3- Hello World示例说明
在上面的步骤中,您已成功创建并运行 JavaFX 的 Hello World 应用。
下图显示了舞台(Stage),场景(Scene),容器(Container),布局(Layout )和控件(Controls)之间的关系:
在JavaFX中,Stage是应用程序窗口,其中包含称为Scene的空间。 Scene包含界面的组件,如Button,Text,…或容器。
4- JavaFX Scene Builder
为了创建一个JavaFX应用程序界面,可以完全编写Java代码。 但是,需要这么多时间来做到这一点,JavaFX Scene Builder是一个可视化工具,允许您设计Scene的界面。 生成的代码是XML代码保存在*.fxml文件中。
5-使用JavaFX Scene Builder的示例
这是一个小例子,使用Scene Builder来设计应用程序界面。应用于该示例的MVC的模型如下所示:
在VIEW上显示它
用户使用CONTROLLER
操作数据(更新,修改,删除,..),MODEL上的数据已更改。
在VIEW上显示MODEL的数据。
下面我们来创建一个新的 MySecene.xml 文件。
File -> New -> Other…
输入文件名称 -
创建结果如下图所示 -
可以使用JavaFX Scene Builder打开fxml文件。
注意:确保已安装JavaFX Scene Builder,并将其集成到Eclipse中。
MyScene.fxml的界面设计屏幕如下:
位于场景上的组件:
拉伸面板 -
锚点面板 -
查找按钮并将其拖动到AnchorPane中:
将Button的ID设置为“myButton”,可以通过其ID从Java代码访问这Button。设置方法将在单击按钮时调用。
将TextField拖放到AnchorPane中。设置TextField的ID,将其作为“myTextField”新拖放到AnchorPane中,可以通过其ID在Java代码中访问这个TextField。
选择文件/保存以保存更改。并在窗口中选择“预览/显示预览”以预览您的设计。
显示结果如下 -
关闭Scene Builder窗口并在Eclipse上刷新项目。您可以查看此时MyScene.fxml文件中生成的代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="309.0" prefWidth="349.0"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<Button fx:id="myButton" layoutX="60.0" layoutY="73.0"
mnemonicParsing="false" onAction="#showDateTime" prefHeight="23.0"
prefWidth="120.0" text="Show Date Time" />
<TextField fx:id="myTextField" layoutX="60.0" layoutY="155.0" />
</children>
</AnchorPane>
将属性fx:controller添加到<AnchorPane>中,Controller将对位于AnchorPane内部的控件(如myButton和myTextField)有引用。
注意:application.MyController类将在以后创建。
控制器(Controller)
以下是 MyController.java 文件的内容 -
package application
import java.net.URL
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.Date
import java.util.ResourceBundle
import javafx.event.ActionEvent
import javafx.fxml.FXML
import javafx.fxml.Initializable
import javafx.scene.control.Button
import javafx.scene.control.TextField
public class MyController implements Initializable {
@FXML
private Button myButton
@FXML
private TextField myTextField
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO (don&apost really need to do anything here).
}
// When user click on myButton
// this method will be called.
public void showDateTime(ActionEvent event) {
System.out.println("Button Clicked!")
Date now= new Date()
DateFormat df = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss")
String dateTimeString = df.format(now)
// Show in VIEW
myTextField.setText(dateTimeString)
}
}
Main.java 文件的内容如下 -
package application
import javafx.application.Application
import javafx.stage.Stage
import javafx.scene.Scene
import javafx.scene.layout.BorderPane
import javafx.application.Application
import javafx.fxml.FXMLLoader
import javafx.scene.Parent
import javafx.scene.Scene
import javafx.stage.Stage
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
// Read file fxml and draw interface.
Parent root = FXMLLoader.load(getClass()
.getResource("/application/MyScene.fxml"))
primaryStage.setTitle("My Application")
primaryStage.setScene(new Scene(root))
primaryStage.show()
} catch(Exception e) {
e.printStackTrace()
}
}
public static void main(String[] args) {
launch(args)
}
}
执行上面的代码,得到以下结果 -
关于纠错补充网友(DX <475******2@qq.com>)
MyScene.fxml文档中有个onDragDetected属性,它指的是发生拖拽动作,不是点击动作,所以我原封不动尝试代码是错误的,怎么点击那个按钮都没有反应,拖拽那个按钮才有反应(报错)。 后来查阅官方文档才发现问题,这给我这个初学者造成了很大的困扰,希望能及时更正内容,应该改为onAction才对。
java fx 教程_JavaFX快速入门相关推荐
- java akka 教程_快速入门 Akka Java 指南
快速入门 Akka Java 指南 Akka 是一个用于在 JVM 上构建高并发.分布式和容错的事件驱动应用程序的运行时工具包.Akka 既可以用于 Java,也可以用于 Scala.本指南通过描述 ...
- java fxml教程_JavaFX 初学入门(一):FXML嵌套与原始控件继承
说明 之前由于做一个小项目需要用swing,结果swing把我折腾的够呛.后来得知有javaFX这个类似于C#中WPF形式的利用XML来写界面的框架之后,马上就转到javaFX上了.找过一些资料但是帮 ...
- Tomcat 教程之快速入门
Tomcat 教程之快速入门 版本说明 本文使用 Tomcat 版本为 Tomcat 8.5.24. Tomcat 8.5 要求 JDK 版本为 1.7 以上. 简介 Tomcat 是什么 Tomca ...
- 好程序员Java培训分享如何快速入门Java编程
好程序员Java培训分享如何快速入门Java编程,作为老牌编程语言,Java拥有广阔的市场应用,企业对Java人才的需求一直居高不下.有很多非专业.零基础的人想要学习Java却不知道怎么快速入门,接下 ...
- Python零基础入门教程( 快速入门)
前言 学无止境,无止境学. 今天要给大家分享的是<Python零基础入门教程01 快速入门>,这是一个系列的教程,从零基础到项目实战.在本教程中,我会给大家介绍Python入门的一些基础知 ...
- ArcGIS教程——ArcGIS快速入门
实例数据:https://pan.baidu.com/s/184wwCmWrJdb-qjxsT614EQ 密码:dowv ArcGIS for Desktop是一套完整的专业GIS应用程序,包含有Ar ...
- tensorflow2.0教程- Keras 快速入门
tensorflow2.0教程-tensorflow.keras 快速入门 Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/artic ...
- SWMM从入门到实践教程 03 快速入门案例的设施参数设置与批量设置
文章目录 1 雨量计 1.1 雨量计基础设置 1.2 雨量计数据来源 2 汇水区 2.1 参数讲解 2.2 设置结果 3 检查井 3.1 参数讲解 3.2 批量设置 4 管道 4.1 参数讲解 4.2 ...
- SWMM从入门到实践教程 02 快速入门案例的绘制
文章目录 1 建模准备 2 设置各类设施 2.1 添加雨量计 2.2 添加子汇水区(正方形) 2.3 绘制节点(圆形) 2.4 绘制管渠 2.5 添加排水口(三角形) 3 画面调节 1 建模准备 建模 ...
最新文章
- EFI BIOS下的磁盘管理工具Diskpart,Efifmt与Efichk(转)
- [转帖]Docker save and load镜像保存
- 远离疲倦,告别非理性思维
- 学习(踩坑)记录——新建工程
- SpringMVC自定义配置消息转换器踩坑总结
- java jvm理解_【java】之深入理解JVM
- Unity获取时间戳
- 网课答案公众号搭建-网课题库接口
- 9.12测试(二)——国际象棋
- 3DS MAX 导入骨骼动画插件
- 工作态度决定了工作结果
- JavaScript学习记录十六
- python sasl_Pyhive、SASL和Python 3.5
- 二层与三层交换机我知道,四层交换机是什么东西?
- 传奇SF刷元宝之迷失版本刷叠加材料
- lds天线技术流程图_一种镭雕镀金方法与流程
- 傅里叶变换、短时傅里叶变换、小波变换
- python制作动态时钟_python+pygame制作一个可自定义的动态时钟和详解
- 51Nod 1433 0和5
- 简单理解:人工智能、数据挖掘、模式识别、机器学习、深度学习