diff --git a/README.md b/README.md index bb6eb16..25824ca 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,32 @@ +# JavaFX-Plus +## **1.1 前言** -**1.1 前言** - -**1.1.1 为什么要出这个框架** +### **1.1.1 为什么要出这个框架** ![输入图片说明](https://images.gitee.com/uploads/images/2019/0629/155142_1235eb9c_2067650.png "JavaFX-Plus.png") - 记得从刚开始学习Java就开始接触JavaFX,从一开始的代码编写图形到后来通过FXML编写界面,一步步的学习之中逐渐领悟JavaFX的强大与灵活,我对JavaFX这门生不逢时的技术有了独特的感情,可以说JavaFX的强大不被许多人了解。 + 记得从刚开始学习Java就开始接触JavaFX,从一开始的代码编写图形到后来通过FXML编写界面,一步步的学习之中逐渐领悟JavaFX的强大与灵活,我对JavaFX这门生不逢时的技术有了独特的感情,可以说JavaFX的强大不被许多人了解。 - 随着不断深入,我也渐渐发现JavaFx的设计思想在很多时候是无法满足当代程序开发思想的,并且一些功能并不是特别容易被使用,所以特定开发了一套简化开发JavaFx开发过程的框架供大家使用,希望能够简化大家的操作将精力专注于主要业务。 + 随着不断深入,我也渐渐发现JavaFx的设计思想在很多时候是无法满足当代程序开发思想的,并且一些功能并不是特别容易被使用,所以特定开发了一套简化开发JavaFx开发过程的框架供大家使用,希望能够简化大家的操作将精力专注于主要业务。 - 下面是我在开发过程中遇到的一些问题,我也针对这些问题做了简化操作。 + 下面是我在开发过程中遇到的一些问题,我也针对这些问题做了简化操作。 -**1.1.2 FX缺点1 : 单一控制器臃肿** +### **1.1.2 FX缺点1 : 单一控制器臃肿** -JavaFX中似乎都是一个Controller把所有的操作和控件囊括在里面,一个Controller有几百行甚至几千行,程序虽然不用考虑模块之间调用问题了,但是这几千行的代码却很难被管理。 + JavaFX中似乎都是一个Controller把所有的操作和控件囊括在里面,一个Controller有几百行甚至几千行,程序虽然不用考虑模块之间调用问题了,但是这几千行的代码却很难被管理。 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0629/021926_d36374fc_2067650.png "bigController.png") 图1 臃肿的controller -**1.1.3 FX缺点2 : 控制类控制能力弱** +### **1.1.3 FX缺点2 : 控制类控制能力弱** -JavaFX启动的Stage和Controller之间总是隔着远远的距离,并且由于Controller是由JavaFX注入生成的,所以很多非Controller的东西与Controller交流,导致了不得不得使用静态方法或者静态成员这类小技巧来实现交流,导致代码变"丑" + JavaFX启动的Stage和Controller之间总是隔着远远的距离,并且由于Controller是由JavaFX注入生成的,所以很多非Controller的东西与Controller交流,导致了不得不得使用静态方法或者静态成员这类小技巧来实现交流,导致代码变"丑" -**1.1.4 FX缺点3 : JavaBean无法使用Property** +### **1.1.4 FX缺点3 : JavaBean无法使用Property** -JavaFX的设计哲学是所有的JavaBean的属性都是property类型的,可是很多时候我们的JavaBean都是String,Integer这类基本类型,要重新修改类属性所带来的问题就足以让人让而却步了。 + JavaFX的设计哲学是所有的JavaBean的属性都是property类型的,可是很多时候我们的JavaBean都是String,Integer这类基本类型,要重新修改类属性所带来的问题就足以让人让而却步了。 ```java //普通JavaBean对象 @@ -63,17 +63,17 @@ class Bill { } ``` -**1.1.5 总结** +### **1.1.5 总结** 为了解决上述问题,我开发了一套增强JavaFX功能的框架,来起到简化JavaFX开发过程的问题。 -**1.2 特色一:模块化开发** +## **1.2 特色一:模块化开发** -1.2.1 介绍 +### 1.2.1 介绍 在Java开发过程中很多界面是相似或者重复的,如果能够将这些界面打包成为一个自定义控件,并且通过Scenebuilder拖动就能产生一个控件那将会大大提高我们的开发效率。所以我们提出将不同区域划分为不同的子模块,已达到减少耦合和加速并行开发。一般我们经常把界面分为顶部工具栏,左边导航栏,右侧的内容栏,如果全部内容都写在一个Controller那么将会导致十分臃肿,我们希望将不同的区域划分开来分而治之。 -1.2.2 如何创建模块 +### 1.2.2 如何创建模块 只要新建一个类继承自FXBaseController,而FXBaseController是继承于Pane,这就是JavaFX-Plus的设计思想之一切皆为Pane。在类上标上FXController注解,提供FXML文件的地址。如果设置为FXWindow那么将会把这个Controller以单独的Window显示,这里仅仅几句代码就实现了一个简单的窗口程序。 @@ -85,13 +85,13 @@ class Bill { 图3 显示结果 -1.2.3 scenebuilder中导入刚刚生成的上面的控件 +### 1.2.3 scenebuilder中导入刚刚生成的上面的控件 ![输入图片说明](https://images.gitee.com/uploads/images/2019/0629/022036_e128f313_2067650.gif "modulesAction.gif") 图4 模块化操作 -**1.3 特色2 :信号机制** +## **1.3 特色2 :信号机制** 有两个主要标签一个是FXSender,这个标签作用在方法上,标记这个方法为信号发射方法。可以通过设置name修改这个信号发射方法的名称,默认是函数名字。 @@ -132,7 +132,7 @@ public class MainController extends FXBaseController{ ![输入图片说明](https://images.gitee.com/uploads/images/2019/0629/022051_db8dbc7a_2067650.gif "signalshow.gif") -**1.4 特色3 :JavaBean 和 JavaFxBean** +## **1.4 特色3 :JavaBean 和 JavaFxBean** 一般我们写的JavaBean都是基本类型的,但是JavaFXBean的设计哲学是这些属性都应该是JavaFX定义的Property类型,这十分不利于我们的开发,我们如何在不修改JavaBean的条件下,使用到JavaFX的Property的一些优良方法呢?答案是我们通过反射获得基本类型对应的Property(目前仅限于boolean,double,integer,long,string,float等基本类型,不支持List等封装对象。) @@ -244,9 +244,9 @@ public class Student { -**2 如何使用这个框架** +## **2.1 如何使用这个框架** -2.1 了解内置注解 +### 2.1.1 了解内置注解 | 名字 | 作用 | 参数 | 要求 | | ------------- | ------------------------------------------------------------ | --------------------------------------- | -------------------- | @@ -258,7 +258,7 @@ public class Student { | @FXSender | 信号发送者 | name可以重命名信号 | | | @FXReceiver | 信号接收函数 | name是订阅的发射者函数名 | 不可空 | -2.2 两个工厂和一个context +### 2.1.2 两个工厂和一个context 在JavaFX-Plus中所有Controller对象和FXEnity对象都必须通过工厂创建。 @@ -272,7 +272,7 @@ student = (Student) FXEntityFactory.getInstance().createJavaBeanProxy(Student.cl MainController mainController = (MainController)FXFactory.getFXController(MainController.class); ``` -2.3 第一个Demo如何使用框架创建第一个程序 +## 3.1 第一个Demo如何使用框架创建第一个程序 ```java @FXScan(base = {"cn.edu.scau.biubiusuisui.example"}) //会扫描带FXController和FXEntity的类进行初始化