更新 README.md

This commit is contained in:
Biubiu
2019-06-29 16:17:36 +08:00
committed by Gitee
parent 8cc3220e32
commit a50ec834d1

View File

@@ -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都是StringInteger这类基本类型要重新修改类属性所带来的问题就足以让人让而却步了。
JavaFX的设计哲学是所有的JavaBean的属性都是property类型的可是很多时候我们的JavaBean都是StringInteger这类基本类型要重新修改类属性所带来的问题就足以让人让而却步了。
```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目前仅限于booleandoubleintegerlongstringfloat等基本类型不支持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的类进行初始化