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..

9926658db5b06bce749d601496056f57.png

创建一个项目名称为:HelloJavaFx,如下图中所示 -

4873660cadc9e004deb71b4bcb25db97.png

项目创建成功以后,如下图中所示 -

555d44c91bbe06d9f374b8527839df69.png

还创建了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

35fb2568c3c73979d01620d2b99c7d81.png

JavaFX的Hello World应用正在运行,结果是一个空白的界面,如下:

d2f19f4481bb91213da7abbc470fa66c.png

3- Hello World示例说明

在上面的步骤中,您已成功创建并运行 JavaFX 的 Hello World 应用。

下图显示了舞台(Stage),场景(Scene),容器(Container),布局(Layout )和控件(Controls)之间的关系:

218a49ee613e2a1c14c2e003d7cbeb81.png

在JavaFX中,Stage是应用程序窗口,其中包含称为Scene的空间。 Scene包含界面的组件,如Button,Text,…或容器。

4- JavaFX Scene Builder

为了创建一个JavaFX应用程序界面,可以完全编写Java代码。 但是,需要这么多时间来做到这一点,JavaFX Scene Builder是一个可视化工具,允许您设计Scene的界面。 生成的代码是XML代码保存在*.fxml文件中。

2e8053a3fe6ab494201b239b47caed81.png

5-使用JavaFX Scene Builder的示例

这是一个小例子,使用Scene Builder来设计应用程序界面。应用于该示例的MVC的模型如下所示:

358ef984b258c94d351918448580125b.png

在VIEW上显示它

用户使用CONTROLLER

操作数据(更新,修改,删除,..),MODEL上的数据已更改。

在VIEW上显示MODEL的数据。

下面我们来创建一个新的 MySecene.xml 文件。

File -> New -> Other…

0c59e73d84e596b57dcb917725833007.png

输入文件名称 -

83f86112c9e06f775264d5fdc853c665.png

创建结果如下图所示 -

bb70ca8f34efb5b17c46120f1184e302.png

可以使用JavaFX Scene Builder打开fxml文件。

注意:确保已安装JavaFX Scene Builder,并将其集成到Eclipse中。

609e681791f106d5f535e22f82530836.png

MyScene.fxml的界面设计屏幕如下:

13f0f6e27faaf652a3854f34d3d94de8.png

位于场景上的组件:

f66d6a57f66f683686b702bcddd263e9.png

拉伸面板 -

46f425f8feab9bd1e4032067dc80480c.png

锚点面板 -

8d8cadf338bd7d377e9b0588d9d4eee8.png

查找按钮并将其拖动到AnchorPane中:

abd560d09e884f5998d4fd3044fbe928.png

将Button的ID设置为“myButton”,可以通过其ID从Java代码访问这Button。设置方法将在单击按钮时调用。

将TextField拖放到AnchorPane中。设置TextField的ID,将其作为“myTextField”新拖放到AnchorPane中,可以通过其ID在Java代码中访问这个TextField。

选择文件/保存以保存更改。并在窗口中选择“预览/显示预览”以预览您的设计。

196361cd21fd5d969bba3f5a71657cc1.png

显示结果如下 -

4078fc95eab2b3b5d8d7f8d4ba05a818.png

关闭Scene Builder窗口并在Eclipse上刷新项目。您可以查看此时MyScene.fxml文件中生成的代码:

xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">

mnemonicParsing="false" onAction="#showDateTime" prefHeight="23.0"

prefWidth="120.0" text="Show Date Time" />

将属性fx:controller添加到中,Controller将对位于AnchorPane内部的控件(如myButton和myTextField)有引用。

3c66d0a947a2f9ba099e9375b6ba8fb2.png

注意:application.MyController类将在以后创建。

88e28b7c6fd857d3c4587a289578d325.png

控制器(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't 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);

}

}

执行上面的代码,得到以下结果 -

9d549cba8602dcf15e3a5bea3422a535.png

关于纠错补充网友(DX <475******2@qq.com>)

MyScene.fxml文档中有个onDragDetected属性,它指的是发生拖拽动作,不是点击动作,所以我原封不动尝试代码是错误的,怎么点击那个按钮都没有反应,拖拽那个按钮才有反应(报错)。 后来查阅官方文档才发现问题,这给我这个初学者造成了很大的困扰,希望能及时更正内容,应该改为onAction才对。

以下是纠正/补充内容:

当Controller构造方法完成后可以通过scene builder点击按钮控件然后右侧选择code页面找到第一个onACtion下拉选择showDateTime构造方法即可修改保存完成后对应的fxml文件中的button控件的记录为onAction="#showDateTime"  提交时间:2019-09-04

Parent root = FXMLLoader.loadgetClass .getResource"/application/MyScene.fxml"示例中的fxml文件名不对,另外,MyScene.fxml目录的层级也不对,需要从src目录移动到src/application下,同时修改MySecene.FXML为MyScene.fxml。  提交时间:2019-09-05

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值