第一篇 开始学习JavaFX

前言

关于本教程

前言这一节将会对本教程进行概述,并且会描述本文档的可用性特征以及本教程中用到的惯例。

本教程由三篇文档组成,它们之前都随着JavaFX 2.x的文档集一同发布了:《JavaFX概览(JavaFX Overview)》、《JavaFX架构(JavaFX Architecture)》和《开始学习JavaFX(Getting Started with JavaFX)》。汇编后的内容已经进行改进,其中包括了关于随JavaSE8发布的JavaFX新特性的更新。本文档包括如下几部分:

● 什么是JavaFX

● 开始学习JavaFX样例程序

每一部分都包含一些章节向你介绍JavaFX技术,并带你学习如何将其使用到你的应用程序开发中。

相关文档

想要了解更多信息,请参考在http://docs.oracle.com/javase/javase-clienttechnologies.htm中的其它JavaFX文档。

有何新特性

本章对JavaSE 8中JavaFX组件的新特性和重大产品改变进行了概述。

● JavaFX应用程序的默认主题是新设计的Modena主题。详见“关键特性”一节中的Modena主题部分。

● 已经加入了对HTML5的支持。详见“向JavaFX应用程序中添加HTML内容”相关章节。

● 新添加的SwingNode类改进了与Swing的互操作性。参考“在JavaFX应用程序中嵌入Swing内容”相关章节。

● 新的内置UI控件,DatePicker和TableView,已经可用。参考《使用JavaFX UI控件》一文来获得更多信息。

● 3D图形库被改进了,增加了一些新的API类。参考“关键特性”一节中的3D图形特性部分和“开始使用JavaFX 3D图形”章节来获得更多信息。

● print包现在是可用的,并且提供了公开的JavaFX打印API

● 加入了富本文支持

● 对Hi-DPI显示的支持已经变得可用了

● CSS样式类变成了公开API

● 引入了调度服务类

第一部分 什么是JavaFX

第一部分包括如下章节:

JavaFX概览

理解JavaFX架构

第二部分 开始学习JavaFX样例程序

这一部分包括了一系列样例程序,它们可以帮助你了解一般的JavaFX编程任务,包括如何使用布局、控件、样式表、FXML和视觉效果。

Hello World, JavaFX 样式3_0_1 helloworld_150 JavaFX中的表单设计3_0_2 login_150 使用CSS美化表单3_0_3 login_css_150
使用FXML进行用户界面设计3_0_4 login_fxml_150 动画形状和视觉效果3_0_5 colorfulcircles_150

资源文件

HelloWorld.java

Login.zip

background.jpg

LoginCSS.zip

FXMLExample.zip

ColorfulCircles.zip

打赏一下
支付宝
微信
  1. 使用了FXML,如何通过FXML传递参数。如何在FXMLLoader的时候将Stage传递给Controller对象

    • 在loader.load()之后获取XXController对象,然后把Stage应用传给Controller:XXController xxCtrl=loader.getController();xxCtrl.setStage(primaryStage);//这方法要在XXController中自己定义。加载FXML文件的操作一般放在主程序中,这样好传递Stage给其他Controller

    • 这个问题困扰我很长时间,现在终于解决了 我直接把代码发给你参考第一步 新建3个文件 PassParamMain.javaPassParamController.javaPassParam.fxml第二步 源代码======================================public class PassParamMain extends Application { @Override public void start(Stage stage) throws Exception { //使用这种方法就无法传参了 建议使用下面的方法// Parent root = FXMLLoader.load(getClass().getResource(“/fxml/PassParam.fxml”)); FXMLLoader loader = new FXMLLoader(getClass().getResource(“/fxml/PassParam.fxml”)); Parent root = loader.load(); Scene scene = new Scene(root,300,250, Color.WHITE); PassParamController passParamController = loader.getController(); passParamController.setUserData(“www.magicalcoder.com”);//关键在这 userData方法是我自定义的 stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); }}========================================public class PassParamController implements Initializable { private Object userData; public Object getUserData() { return userData; } public void setUserData(Object userData) { this.userData = userData; } @Override public void initialize(URL location, ResourceBundle resources) { System.out.println(userData);//这里肯定是null 因为load的时候,这个方法就执行了 那时还没setUserData } @FXML private Button button; @FXML public void click(){ System.out.println(userData);//这个肯定就有内容了 }}====================================<?import javafx.scene.control.Button?><?import javafx.scene.control.Label?><?import javafx.scene.layout.AnchorPane?> 第三步 自己看代码尝试吧 肯定可以的

      • 不能发标签代码 我用转义了下<AnchorPane id=”AnchorPane” prefHeight=”200″ prefWidth=”320″ xmlns:fx=”http://javafx.com/fxml” fx:controller=”com.magicalcoder.jfxstudy.passparam.PassParamController”><children><Button layoutX=”126″ layoutY=”90″ text=”Click Me!” onAction=”#click” fx:id=”button” /><Label layoutX=”126″ layoutY=”120″ minHeight=”16″ minWidth=”69″ fx:id=”label” /></children></AnchorPane>

  2. 请问一下,对于目前javafx的布局方式有没有其他的类型,本人感觉fxml的布局很繁琐,似乎刻意模仿了微软的xaml,不如android的xml更加简练清晰,有没有类似android布局或者html那种div布局的方式?

    • 觉着fxml布局繁琐,不会是手动写fxml文件吧?用Scene Builder 布局,可以拖控件,也不是很麻烦吧。

        • fxml是针对javafx开发的类xml语言么??javafx没有像Qt用xml开发界面么??还有问下,scene builder在哪里下载??我怎么在oracle网上没找到??

          • 就是xml的一种,xml可以被定制成各种ml,比如fxml,schema这些,有用xml开发界面的,不过很难用,用xml开发界面的不管是javafx还是android,都很垃圾

  3. 每篇的源代码可以从哪里统一下载啊?我在甲骨文官网上写的示例文件里怎么没有这些啊,感谢感谢!