我的编程空间,编程开发者的网络收藏夹
学习永远不晚

javafx的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

javafx的示例分析

小编给大家分享一下javafx的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

JavaFX 介绍

一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面介绍的也都是这两种。很多学校、培训班教学的也是这两种技术。但是其实这两种技术都已经过时很长时间了。Swing虽然学起来也不算很难,但是用它来写界面其实也很不好写。因为它的界面和代码没有做到分离,所以在编写的时候,代码中肯定充斥着大量坐标,修改极其不易。这方面做的比较好的就是微软的WPF,只能说谁用谁知道。

当然,虽然编写客户端图形程序是Java的弱项,但是Java并没有放弃这方面的努力。今天介绍的JavaFX就是Java在编写图形界面程序的最新技术。如果你准备使用Java编写图形界面程序,又没有历史包袱,那么强烈推荐使用JavaFX。

这是Oracle官网关于JavaFX的资源和文档。

这是官方的示例程序,我们可以参考JavaFX的部分来学习如何使用。下面是其中一个分形的JavaFX程序,点击上面的数字可以进入不同的微观展示,感觉有一种看病毒微观世界的感觉,很震撼。

javafx的示例分析

如何安装

只要你安装了最新版本的JDK 8,那么就可以使用JavaFX库了。如果没有安装的话,那么赶快开始安装吧。

快速上手

第一个程序

新建一个项目,然后编写如下的类,然后编译运行,即可看到结果。关于这个程序不用做解释吧。如果有学习过Swing以及其他图形界面框架的经验的话,应该非常容易理解这段代码。当然由于JavaFX是新东西,所以我也顺便使用Java 8的新特性——lambda表达式。

package yitian.javafxsample;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.StackPane;import javafx.stage.Stage;public class HelloJavaFX extends Application {@Override  public void start(Stage primaryStage) throws Exception {Button btn = new Button();btn.setText("你好啊,世界");btn.setOnAction(event -> {System.out.println("你好,世界!");});StackPane root = new StackPane();root.getChildren().add(btn);Scene scene = new Scene(root, 300, 250);primaryStage.setTitle("Hello World!");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}}

运行截图如下。

javafx的示例分析

用户输入

这个程序可以用来处理用户登录的情况,代码如下,重要部分都添加了注释。代码的最后一部分使用setOnAction函数为按钮添加了点击事件,当点击按钮的时候会显示文本。

public class UserInput extends Application {@Override  public void start(Stage primaryStage) throws Exception {//网格布局GridPane grid = new GridPane();grid.setAlignment(Pos.CENTER);//网格垂直间距grid.setHgap(10);//网格水平间距grid.setVgap(10);grid.setPadding(new Insets(25, 25, 25, 25));//新建场景Scene scene = new Scene(grid, 300, 275);primaryStage.setScene(scene);//添加Text scenetitle = new Text("Welcome");scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));grid.add(scenetitle, 0, 0, 2, 1);//添加标签及文本框Label userName = new Label("用户名:");grid.add(userName, 0, 1);TextField userTextField = new TextField();grid.add(userTextField, 1, 1);//添加标签及密码框Label pw = new Label("密码:");grid.add(pw, 0, 2);PasswordField pwBox = new PasswordField();grid.add(pwBox, 1, 2);//添加提交按钮Button btn = new Button("登录");HBox hbBtn = new HBox(10);hbBtn.setAlignment(Pos.BOTTOM_RIGHT);hbBtn.getChildren().add(btn);grid.add(hbBtn, 1, 4);//提交文本提示final Text actiontarget = new Text();grid.add(actiontarget, 1, 6);btn.setOnAction(event -> {actiontarget.setFill(Color.FIREBRICK);actiontarget.setText("已经登录");});primaryStage.setTitle("JavaFX Welcome");primaryStage.show();}public static void main(String[] args) {launch(args);}}

程序运行截图如下。

javafx的示例分析

这个程序其实也没什么难点,就是使用了网格布局,然后将每个元素添加到网格中。关于网格布局的属性意义可以参考官方的图。

javafx的示例分析

用FXML设计用户界面

现代图形界面框架都支持将界面和代码分离开,而且比较常用的描述语言是XML,例如QT的QML、WPF的XAML,当然JavaFX也有类似的语言,叫做FXML。如果需要详细了解FXML,可以参考Oracle官网的文章Introduction to FXML。

下面用FXML重写一下上面那个小例子,每个部分都做了注释。如果学习过其他类似描述语言的话,会发现这些其实都差不多。唯一需要注意的就是布局里面的fx:controller属性,它指定一个控制器,控制器的作用就是编写界面对应的代码。

<?xml version="1.0" encoding="UTF-8"?><!--导入类--><?import javafx.geometry.Insets?><?import javafx.scene.control.*?><?import javafx.scene.layout.*?><?import javafx.scene.text.Font?><?import javafx.scene.text.Text?><!--设置布局--><GridPane xmlns="http://javafx.com/javafx"     xmlns:fx="http://javafx.com/fxml"     fx:controller="yitian.javafxsample.Controller"     prefHeight="400.0" prefWidth="600.0"     alignment="center" hgap="10" vgap="10">  <padding>    <Insets top="25" right="25" bottom="10" left="25"/>  </padding>  <!--欢迎文本-->  <Text text="Welcome"     GridPane.columnIndex="0" GridPane.rowIndex="0"     GridPane.columnSpan="2">    <font>      <Font name="Consolas" size="20"/>    </font>  </Text>  <Label text="用户名:"      GridPane.columnIndex="0" GridPane.rowIndex="1"/>  <TextField      GridPane.columnIndex="1" GridPane.rowIndex="1"/>  <Label text="密码:"      GridPane.columnIndex="0" GridPane.rowIndex="2"/>  <PasswordField fx:id="passwordField"          GridPane.columnIndex="1" GridPane.rowIndex="2"/>  <!--按钮及提示文本-->  <HBox spacing="10" alignment="bottom_right"     GridPane.columnIndex="1" GridPane.rowIndex="4">    <Button text="显示密码"        onAction="#showPasswordButton"/>  </HBox>  <Text fx:id="hintText"     GridPane.columnIndex="0" GridPane.columnSpan="2"     GridPane.halignment="RIGHT" GridPane.rowIndex="6"/></GridPane>

下面就是这个FXML文件对应的控制器,它是一个标准的Java类。在FXML中用fx:id属性指定的ID,可以在控制器中声明为一个类字段,通过这个字段就可以和界面组件进行交互。同样道理,onAction声明的事件处理程序,在控制器中就是一个方法。注意这些字段和方法都需要使用@FXML注解进行标注。

import javafx.event.ActionEvent;import javafx.fxml.FXML;import javafx.scene.control.PasswordField;import javafx.scene.text.Text;public class Controller {@FXML  private Text hintText;@FXML  private PasswordField passwordField;@FXML  protected void showPasswordButton(ActionEvent event) {hintText.setText("显示密码:" + passwordField.getText());}}

最后要做修改的就是主程序了。在主程序中需要使用FXMLLoader来加载FXML资源,其他部分没有太大变化。

public class UseFxml extends Application {@Override  public void start(Stage primaryStage) throws Exception {Parent root = FXMLLoader.load(getClass().getResource("ui.fxml"));Scene scene = new Scene(root, 300, 275);primaryStage.setTitle("使用FXML");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}}

程序运行截图如下。

javafx的示例分析

如果希望修改组件样式,JavaFX提供了CSS接口,让我们可以直接使用CSS文件修改样式。首先需要在FXML文件中添加相应样式表的引用。文件名前面的@表示这个CSS文件和FXML文件在同一目录下。

<GridPane>  <stylesheets>    <URL value="@style.css"/>  </stylesheets><GridPane/>

样式表和普通的样式表差不多,只不过需要添加JavaFX特有的前缀-fx-。

#btnShowPassword {  -fx-background-color: deeppink;}

上面用了ID选择器,所以对应地,在FXML中也需要ID属性。

<Button id="btnShowPassword" text="显示密码"        onAction="#showPasswordButton"/>

自定义之后的程序如图所示。这里只简单修改了一下按钮的背景色,其实可以更改的样式有很多,包括程序背景等等,有兴趣的同学可以自行尝试。

javafx的示例分析

以上是“javafx的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

javafx的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

javafx的示例分析

小编给大家分享一下javafx的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaFX 介绍一提到Java的图形界面库,我们通常听到的都是Swing,
2023-05-30

WebSocket的示例分析

这篇文章主要介绍WebSocket的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、Socket简介Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket的英文原
2023-06-22

HAProxy的示例分析

这篇文章主要介绍了HAProxy的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层
2023-06-27

HTTPS的示例分析

这篇文章主要介绍了HTTPS的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HTTPS优势HTTPS是基于tls和ssl加密的http协议,网络传输是加密的,因此它的
2023-06-12

SpringBoot的示例分析

这篇文章主要介绍了SpringBoot的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、图示spring再简化:SpringBoot-jar:内嵌tomacat;微
2023-06-15

WebService的示例分析

这篇文章主要为大家展示了“WebService的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“WebService的示例分析”这篇文章吧。一、序言  大家或多或少都听过 WebServi
2023-05-30

JVM的示例分析

小编给大家分享一下JVM的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!追本溯源——堆和栈堆通常是一个可以被看做一棵树的数组对象,栈是一种只能在一端进行插
2023-06-02

HTTP3的示例分析

这篇文章给大家分享的是有关HTTP3的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTTP3是HTTP协议的最新版本。从诞生之初,HTTP就是交换超文本文档的首选应用层协议。多年来,为了跟上互联网的发展
2023-06-27

Final的示例分析

小编给大家分享一下Final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务的划分首先不可能无限细化,因此肯定是不需要无限的出现子类的。一旦无限出现子
2023-06-06

Spring的示例分析

这篇文章将为大家详细讲解有关Spring的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。WHY在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB。相对于E
2023-05-30

MQTT的示例分析

这篇文章主要介绍了MQTT的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MQTT(Message Queuing Telemetry Transport,消息队列遥
2023-06-27

Servlet的示例分析

这篇文章主要介绍了Servlet的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有关Java Servlets JavaTM servlets是一个不受平台约束
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录