1 Star 0 Fork 0

零空间/datafx8-tutorials

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

1. 大纲

001_[2023-09-06]: 项目说明

002_[2023-09-06]: 项目内容说明

003_[2023-09-06]: 各模块依赖说明

004_[2023-09-06]: 各模块实现效果说明

005_[2023-09-06]: 不同模块启动类比较

2. 内容

001_[2023-09-06]

项目说明

本项目是参考DataFX官方教程 [1] 做的个人练习,DataFX是JavaFX的一个开源组件,作用是连接控制器和FXML文件,可以实现界面的动态切换. DataFX的源码和教程样例可参考 [2].

002_[2023-09-06]

项目内容说明

项目内共有flow1 ~ flow6这6个模块,对应官方教程 [1] 中的6个教程. 每个模块都是独立的,分别运行各自启动类AppStartup1 ~ 6即可启动.

003_[2023-09-06]

各模块依赖说明

flow1~flow5的依赖如下:

<dependency>
    <groupId>io.datafx</groupId>
    <artifactId>flow</artifactId>
    <version>8.0</version>
</dependency>

flow6依赖于libs中的jar包 (datafx-core-8.0.2-SNAPSHOT.jar、datafx-flow-8.0.2-SNAPSHOT.jar),以及下面通过pom.xml引入的依赖 (否则会报Caused by: java.lang.ClassNotFoundException: javax.inject.Inject的错误):

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.0</version>
</dependency>

004_[2023-09-06]

各模块实现效果说明

  • flow1

    单击按钮实现数字增长.

  • flow2

    单击按钮实现页面切换 .

  • flow3

    前进、后退切换页面,在各视图中触发的.

  • flow4

    flow4 和flow3的看起来效果是一样的,区别有两点:

    (1)视图切换是在菜单条中触发的,工具栏+上面的空白StackPane其实是一个整体的主视图,各视图的fxml中只有要展示出来的Label而已,实际上是不同的Label在带有菜单条的主视图中切换而已.

    (2)在于Step1的页面右上角有个?的超链接,单击后控制台会打印信息:

  • flow5

    前进、后退切换视图,在flow4的基础上实现的,但是增加了放大特效.

  • flow6

    通过单选按钮选择要跳转的目标视图,点击确认跳转按钮进行跳转.

005_[2023-09-06]

不同模块启动类比较

  • flow1~flow3、flow6的类型(最原始的方法)

flow3中,各视图控制类中均定义了导航和操作,因此启动类用最基础的即可

package io.datafx.tutorial;

import io.datafx.controller.flow.Flow;
import io.datafx.tutorial.controller.SimpleController;
import javafx.application.Application;
import javafx.stage.Stage;

public class AppStartup1 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        /*------ flow1 ------*/
        new Flow(SimpleController.class).startInStage(primaryStage);
        
        /*------ flow2 ------*/
        // new Flow(View1Controller.class).startInStage(primaryStage);
        
        /*------ flow3 ------*/
        // new Flow(WizardStartController.class).startInStage(primaryStage);
        
        /*------ flow4 ------*/
        // new Flow(MainController.class).startInStage(primaryStage);
    }

    public static void main(String[] args) {
        launch(args);
    }
}

  • flow4的类型(启动类中定义导航和操作).

注:与flow3不同,flow4的导航和定义不在各视图控制类中,而是通过界面下方的工具栏触发的,该模式需在启动类中定义视图切换逻辑.

package io.datafx.tutorial;

import io.datafx.controller.flow.Flow;
import io.datafx.tutorial.controller.*;
import javafx.application.Application;
import javafx.stage.Stage;

public class AppStartup4 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        new Flow(WizardStartController.class).
                withLink(WizardStartController.class, "next", Wizard1Controller.class).
                withLink(Wizard1Controller.class, "next", Wizard2Controller.class).
                withLink(Wizard2Controller.class, "next", Wizard3Controller.class).
                withLink(Wizard3Controller.class, "next", WizardDoneController.class).
                withGlobalBackAction("back").
                withGlobalLink("finish", WizardDoneController.class).
                withGlobalTaskAction("help", () -> System.out.println("## There is no help for the application :( ##")).
                startInStage(primaryStage);
    }
    
    public static void main(String[] args) {
        launch(args);
    }

}

  • flow5的类型(定义一个主视图,各视图中只定义相对于主视图动态变化的信息. 由于主视图控制类中定义了视图切换的逻辑,因此启动类中需增加主视图控制类的定义)
package io.datafx.tutorial;

import io.datafx.controller.flow.Flow;
import io.datafx.controller.flow.FlowHandler;
import io.datafx.controller.flow.container.DefaultFlowContainer;
import io.datafx.tutorial.controller.WizardController;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class AppStartup5 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Flow flow  = new Flow(WizardController.class);
        FlowHandler flowHandler = flow.createHandler();
        StackPane pane = flowHandler.start(new DefaultFlowContainer());
        primaryStage.setScene(new Scene(pane));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

综上所述,对比如下:

flow1~flow3 flow4 flow5 flow6
各视图中需定义视图切换逻辑,启动类用最原始的即可 各视图无需定义视图切换逻辑,但需在启动类中定义 定义一个主视图,视图切换逻辑都定义在主视图控制类中,所以启动类中无需定义切换逻辑,只需定义主视图相关信息即可 定义一个主视图,其控制类中定义了视图切换逻辑,启动类中也无需定义主视图控制类信息,启动类用最原始的即可

3. 参考

[1] DataFX 8.0 Tutorials

[2] DataFX/tutorials at master · guigarage/DataFX · GitHub

空文件

简介

基于DataFX8.0官方教程的练习. 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/nul-space/datafx8-tutorials.git
git@gitee.com:nul-space/datafx8-tutorials.git
nul-space
datafx8-tutorials
datafx8-tutorials
master

搜索帮助