From bc421b87b9161a7d273f7d345c6c8efbd5dd6214 Mon Sep 17 00:00:00 2001 From: billkiller <747441355@qq.com> Date: Sat, 27 Jul 2019 22:37:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=87=BD=E6=95=B0=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F=E5=92=8Cchange=E8=A1=A8=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 5 + .idea/encodings.xml | 6 + .idea/inspectionProfiles/Project_Default.xml | 36 + ...n__commons_logging_commons_logging_1_2.xml | 13 - ...ven__org_javassist_javassist_3_21_0_GA.xml | 13 - ...ingframework_spring_aop_4_3_13_RELEASE.xml | 13 - ...gframework_spring_beans_4_3_13_RELEASE.xml | 13 - ...ramework_spring_context_4_3_13_RELEASE.xml | 13 - ...ngframework_spring_core_4_3_13_RELEASE.xml | 13 - ...ework_spring_expression_4_3_13_RELEASE.xml | 13 - .idea/workspace.xml | 1312 ++++++++++------- JavaFx-Plus.iml | 7 - pom.xml | 165 ++- .../scau/biubiusuisui/annotation/FXBind.java | 5 +- .../biubiusuisui/annotation/FXController.java | 4 +- .../scau/biubiusuisui/annotation/FXValue.java | 14 + .../biubiusuisui/config/FXMLLoaderPlus.java | 4 +- .../config/FXPlusApplication.java | 2 - .../{moveDemo => actionDemo}/Demo.java | 8 +- .../example/actionDemo/MainController.java | 58 + .../{Student.java => actionDemo/User.java} | 16 +- .../example/expressionDemo/Demo.java | 19 - .../example/expressionDemo/Main2.java | 74 - .../example/listViewExpressionDemo/Demo.java | 19 - .../MainController.java | 11 - .../example/moveDemo/CircleBean.java | 42 - .../biubiusuisui/example/moveDemo/Main2.java | 72 - .../example/springDemo/SpringController.java | 54 - .../example/springDemo/SpringDemo.java | 27 - .../springDemo2/SpringController2.java | 35 - .../example/springDemo2/SpringDemo.java | 27 - .../SpringExpressionDemo.java | 29 - .../SpringExpressionDemoController.java | 82 -- .../exception/NoSuchChangeMethod.java | 12 + .../biubiusuisui/expression/BindParser.java | 9 + .../expression/ExpressionParser.java | 78 - .../expression/action/ChangeParser.java | 17 + .../expression/data/ExpFunction.java | 10 + .../expression/data/ExpressionParser.java | 185 +++ .../expression/data/FunctionExpression.java | 85 ++ .../expression/{ => data}/MyBeanAdapter.java | 2 +- .../{ => data}/MyExpressionValue.java | 7 +- .../scau/biubiusuisui/factory/FXFactory.java | 8 +- .../scau/biubiusuisui/function/Draggale.java | 9 + src/main/resources/Main2.fxml | 2 +- src/main/resources/actionDemo.fxml | 17 + src/test/java/MainTest.java | 11 +- .../expression/ExpressionParserTest.java | 34 +- .../expression/data/ExpressionParserTest.java | 30 + .../factory/FXEntityFactoryTest.java | 14 +- 50 files changed, 1434 insertions(+), 1320 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/libraries/Maven__commons_logging_commons_logging_1_2.xml delete mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/annotation/FXValue.java rename src/main/java/cn/edu/scau/biubiusuisui/example/{moveDemo => actionDemo}/Demo.java (65%) create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/MainController.java rename src/main/java/cn/edu/scau/biubiusuisui/example/{Student.java => actionDemo/User.java} (71%) delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Demo.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Main2.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/Demo.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/MainController.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/CircleBean.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Main2.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringController.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringDemo.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringController2.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringDemo.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemo.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemoController.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/exception/NoSuchChangeMethod.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/BindParser.java delete mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/ExpressionParser.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpFunction.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java rename src/main/java/cn/edu/scau/biubiusuisui/expression/{ => data}/MyBeanAdapter.java (94%) rename src/main/java/cn/edu/scau/biubiusuisui/expression/{ => data}/MyExpressionValue.java (97%) create mode 100644 src/main/java/cn/edu/scau/biubiusuisui/function/Draggale.java create mode 100644 src/main/resources/actionDemo.fxml create mode 100644 src/test/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParserTest.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 0980d0e..d2b0f25 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -13,4 +13,9 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..b26911b --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..7d66f2f --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml b/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml deleted file mode 100644 index eab40b3..0000000 --- a/.idea/libraries/Maven__commons_logging_commons_logging_1_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml deleted file mode 100644 index 09c4cf0..0000000 --- a/.idea/libraries/Maven__org_javassist_javassist_3_21_0_GA.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml deleted file mode 100644 index e06e71e..0000000 --- a/.idea/libraries/Maven__org_springframework_spring_aop_4_3_13_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml deleted file mode 100644 index 0a8cafe..0000000 --- a/.idea/libraries/Maven__org_springframework_spring_beans_4_3_13_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml deleted file mode 100644 index 8050852..0000000 --- a/.idea/libraries/Maven__org_springframework_spring_context_4_3_13_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml deleted file mode 100644 index b95dd78..0000000 --- a/.idea/libraries/Maven__org_springframework_spring_core_4_3_13_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml deleted file mode 100644 index 7a825ff..0000000 --- a/.idea/libraries/Maven__org_springframework_spring_expression_4_3_13_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0f3e393..3cae1e1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -7,17 +7,57 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -46,68 +86,95 @@ - - + + - - + + - - - + - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + - + - - - - - - - - - - - - - - - + + @@ -116,78 +183,33 @@ - + - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - System - Sys - System.out - builder Builder type Expression.value @@ -214,6 +236,10 @@ controller injectFi System.out.println + textProperty + managed + String + Property config.FXMLoaer @@ -239,36 +265,11 @@ + + @@ -515,11 +686,11 @@ + - @@ -534,26 +705,13 @@ - + - - - - - - - @@ -680,7 +854,15 @@ - + + + + + + + + + 1561745555309 @@ -724,25 +906,17 @@ - - - - - - - - - - - - - - - - @@ -758,9 +932,24 @@ + + + + + + + + + + + + + + + - @@ -775,8 +964,8 @@ - - + + @@ -784,24 +973,24 @@ - - + + - + - + - + - + @@ -887,7 +1076,8 @@ - @@ -905,7 +1095,7 @@ @@ -1043,105 +1271,16 @@ - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - @@ -1150,236 +1289,222 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + - - + + + + + + + + + - - - + - - + + - - - + - - + + - + + - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1389,69 +1514,174 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + - + - - - - - - + + - + - - + + - + - - + + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1543,4 +1773,12 @@ + + \ No newline at end of file diff --git a/JavaFx-Plus.iml b/JavaFx-Plus.iml index 01c33d2..1f364cd 100644 --- a/JavaFx-Plus.iml +++ b/JavaFx-Plus.iml @@ -20,12 +20,5 @@ - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index d3b400a..0a02ddb 100644 --- a/pom.xml +++ b/pom.xml @@ -3,13 +3,33 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + javafx-plus + com.gitee.Biubiuyuyu + javafx-plus + 1.0.0-RELEASE + jar - groupId - JavaFx-Plus - 1.0-SNAPSHOT + + + org.sonatype.oss + oss-parent + 7 + + + this is javafx framework that simplified coding + + + + javafx-plus + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + javafx-plus + https://oss.sonatype.org/content/repositories/snapshots + + - cglib cglib @@ -22,37 +42,112 @@ 4.11 test - - - org.javassist - javassist - 3.21.0-GA - - - - org.springframework - spring-core - 4.3.13.RELEASE - - - org.springframework - spring-context - 4.3.13.RELEASE - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + -Xlint:deprecation + + + + + + ${java.home}\lib\rt.jar;${java.home}\lib\jce.jar + + + + + + + + + release + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + package + + jar + + + -Xdoclint:none + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + GNU Lesser General Public License Version 3 + http://www.gnu.org/licenses/lgpl.txt + repo + + + + master + https://gitee.com/Biubiuyuyu/JavaFX-Plus.git + scm:git:https://gitee.com/Biubiuyuyu/JavaFX-Plus.git + scm:git:https://gitee.com/Biubiuyuyu/JavaFX-Plus.git + + + + Zhu zhanbiao + 747441355@qq.com + cn.edu.scau + + + + Yang suiyu + 498870048@qq.com + cn.edu.scau + + \ No newline at end of file diff --git a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXBind.java b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXBind.java index 4de1f65..8e009a0 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXBind.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXBind.java @@ -2,10 +2,7 @@ package cn.edu.scau.biubiusuisui.annotation; import java.lang.annotation.*; -/** - * @Author jack - * @Date:2019/7/4 13:58 - */ + @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Inherited diff --git a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXController.java b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXController.java index 3551334..a052a7f 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXController.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXController.java @@ -4,8 +4,8 @@ import java.lang.annotation.*; /** * This is use for marking A controller as FX-Plus Controller - * @Author jack - * @Date:2019/6/25 1:34 + @Author jack + @Date:2019/6/25 1:34 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) diff --git a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXValue.java b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXValue.java new file mode 100644 index 0000000..716fb2c --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXValue.java @@ -0,0 +1,14 @@ +package cn.edu.scau.biubiusuisui.annotation; + +import java.lang.annotation.*; + +/** + * @Author jack + * @Date:2019/7/27 3:06 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +@Inherited +public @interface FXValue { + String value(); +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/config/FXMLLoaderPlus.java b/src/main/java/cn/edu/scau/biubiusuisui/config/FXMLLoaderPlus.java index ed839de..f0f3159 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/config/FXMLLoaderPlus.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/config/FXMLLoaderPlus.java @@ -1,8 +1,8 @@ package cn.edu.scau.biubiusuisui.config; import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.expression.MyBeanAdapter; -import cn.edu.scau.biubiusuisui.expression.MyExpressionValue; +import cn.edu.scau.biubiusuisui.expression.data.MyBeanAdapter; +import cn.edu.scau.biubiusuisui.expression.data.MyExpressionValue; import cn.edu.scau.biubiusuisui.factory.FXFactory; import com.sun.javafx.beans.IDProperty; import com.sun.javafx.fxml.BeanAdapter; diff --git a/src/main/java/cn/edu/scau/biubiusuisui/config/FXPlusApplication.java b/src/main/java/cn/edu/scau/biubiusuisui/config/FXPlusApplication.java index 8e4672f..11c9fca 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/config/FXPlusApplication.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/config/FXPlusApplication.java @@ -18,7 +18,6 @@ import java.util.Set; * @Author jack * @Date:2019/6/25 2:54 */ - public class FXPlusApplication { private static FXWindowParser windowAnnotationParser = new FXWindowParser(); @@ -62,7 +61,6 @@ public class FXPlusApplication { private static void loadFXPlusClass(String className,BeanBuilder beanBuilder) throws ClassNotFoundException { Class clazz = Class.forName(className); if(clazz.getAnnotation(FXWindow.class)!=null) { - System.out.println(className); FXFactory.loadFXController(clazz, beanBuilder); } } diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Demo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/Demo.java similarity index 65% rename from src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Demo.java rename to src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/Demo.java index 89fc49d..2d10005 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Demo.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/Demo.java @@ -1,16 +1,16 @@ -package cn.edu.scau.biubiusuisui.example.moveDemo; +package cn.edu.scau.biubiusuisui.example.actionDemo; import cn.edu.scau.biubiusuisui.annotation.FXScan; +import cn.edu.scau.biubiusuisui.annotation.FXSender; import cn.edu.scau.biubiusuisui.config.FXPlusApplication; import javafx.application.Application; import javafx.stage.Stage; /** * @Author jack - * @Date:2019/6/25 7:05 + * @Date:2019/7/27 1:43 */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.moveDemo"}) -//项目目录中带有中文字符会导致无法启动 +@FXScan(base = "cn.edu.scau.biubiusuisui.example.actionDemo") public class Demo extends Application { @Override public void start(Stage primaryStage) throws Exception { diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/MainController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/MainController.java new file mode 100644 index 0000000..3a50995 --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/MainController.java @@ -0,0 +1,58 @@ +package cn.edu.scau.biubiusuisui.example.actionDemo; + +import cn.edu.scau.biubiusuisui.annotation.FXBind; +import cn.edu.scau.biubiusuisui.annotation.FXController; +import cn.edu.scau.biubiusuisui.annotation.FXData; +import cn.edu.scau.biubiusuisui.annotation.FXWindow; +import cn.edu.scau.biubiusuisui.entity.FXBaseController; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.PasswordField; +import javafx.scene.control.TextField; + +import java.text.SimpleDateFormat; + +/** + * @Author jack + * @Date:2019/7/27 1:43 + */ +@FXController(path = "actionDemo.fxml") +@FXWindow(title = "actionDemo") +public class MainController extends FXBaseController { + + + + @FXML + @FXBind("text=${@toUs(time.text)}") + private Label us; + + @FXML + @FXBind("text=${@toJp(time.text)}") + private Label jp; + + @FXML + private TextField time; + + @FXML + @FXBind("text=${@toUk(time.text)}") + private Label uk; + + public String toUs(String value){ + double money = Double.valueOf(value); + double percent = 0.1454; + return String.valueOf(money * percent); + } + + public String toJp(String value){ + double money = Double.valueOf(value); + double percent = 15.797; + return String.valueOf(money * percent); + } + + public String toUk(String value){ + double money = Double.valueOf(value); + double percent = 0.1174; + return String.valueOf(money * percent); + } +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/Student.java b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/User.java similarity index 71% rename from src/main/java/cn/edu/scau/biubiusuisui/example/Student.java rename to src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/User.java index 9f49417..b211461 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/Student.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/example/actionDemo/User.java @@ -1,29 +1,19 @@ -package cn.edu.scau.biubiusuisui.example; +package cn.edu.scau.biubiusuisui.example.actionDemo; import cn.edu.scau.biubiusuisui.annotation.FXEntity; import cn.edu.scau.biubiusuisui.annotation.FXField; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; /** * @Author jack - * @Date:2019/6/27 20:02 + * @Date:2019/7/27 12:19 */ - @FXEntity -@Component -public class Student { - +public class User { @FXField private String name; - @FXField private String password; - - public String getName() { return name; } diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Demo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Demo.java deleted file mode 100644 index 64a794a..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Demo.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.expressionDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXScan; -import cn.edu.scau.biubiusuisui.config.FXPlusApplication; -import javafx.application.Application; -import javafx.stage.Stage; - -/** - * @Author jack - * @Date:2019/6/25 7:05 - */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.expressionDemo"}) -//项目目录中带有中文字符会导致无法启动 -public class Demo extends Application { - @Override - public void start(Stage primaryStage) throws Exception { - FXPlusApplication.start(Demo.class); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Main2.java b/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Main2.java deleted file mode 100644 index 3bccc91..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/expressionDemo/Main2.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.expressionDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXBind; -import cn.edu.scau.biubiusuisui.annotation.FXController; -import cn.edu.scau.biubiusuisui.annotation.FXData; -import cn.edu.scau.biubiusuisui.annotation.FXWindow; -import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.example.Student; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.PasswordField; -import javafx.scene.control.TextField; -import javafx.stage.StageStyle; - -/** - * @Author jack - * @Date:2019/7/4 11:36 - */ -@FXController(path = "Main.fxml") -@FXWindow(title = "hello", resizable = true, draggable = true) -public class Main2 extends FXBaseController { - - @FXData - @FXBind( - { - "name=${usr.text}", - "password=${psw.text}" - } - ) - Student student = new Student(); - - @FXML - private PasswordField psw; - - @FXML - private Label label; - - @FXML - private TextField usr; - - @FXML - private Button resetBtn; - - @FXML - private Button loginBtn; - - @FXML - private Label usrMsg; - - @FXBind("text=${student.name}") - @FXML - private Label pswMsg; - - @FXML - void login(ActionEvent event) { - System.out.println("user:" + student.getName()); - System.out.println("psw:" + student.getPassword()); - if ("admin".equals(student.getName()) && "admin".equals(student.getPassword())) { - System.out.println("Ok"); - } else { - System.out.println("fail"); - } - } - - @FXML - void reset(ActionEvent event) { - psw.setText(""); - usr.setText(""); - } - - -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/Demo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/Demo.java deleted file mode 100644 index a13ce58..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/Demo.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.listViewExpressionDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXScan; -import cn.edu.scau.biubiusuisui.config.FXPlusApplication; -import javafx.application.Application; -import javafx.stage.Stage; - -/** - * @Author jack - * @Date:2019/7/24 22:56 - */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.expressionDemo"}) -//项目目录中带有中文字符会导致无法启动 -public class Demo extends Application { - @Override - public void start(Stage primaryStage) throws Exception { - FXPlusApplication.start(Demo.class); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/MainController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/MainController.java deleted file mode 100644 index 6ff85ce..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/listViewExpressionDemo/MainController.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.listViewExpressionDemo; - -import cn.edu.scau.biubiusuisui.entity.FXBaseController; - -/** - * @Author jack - * @Date:2019/7/24 22:58 - */ -public class MainController extends FXBaseController { - //待开发 -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/CircleBean.java b/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/CircleBean.java deleted file mode 100644 index 7e22f17..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/CircleBean.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.moveDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXEntity; -import cn.edu.scau.biubiusuisui.annotation.FXField; - -/** - * @Author jack - * @Date:2019/7/25 9:24 - */ -@FXEntity -public class CircleBean { - - @FXField - double x = 0; - - @FXField - double y = 0; - - public double getX() { - return x; - } - - public void setX(double x) { - this.x = x; - } - - public double getY() { - return y; - } - - public void setY(double y) { - this.y = y; - } - - @Override - public String toString() { - return "CircleBean{" + - "x=" + x + - ", y=" + y + - '}'; - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Main2.java b/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Main2.java deleted file mode 100644 index f4fba7e..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/moveDemo/Main2.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.moveDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXBind; -import cn.edu.scau.biubiusuisui.annotation.FXController; -import cn.edu.scau.biubiusuisui.annotation.FXData; -import cn.edu.scau.biubiusuisui.annotation.FXWindow; -import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.example.Student; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.PasswordField; -import javafx.scene.control.TextField; -import javafx.scene.shape.Circle; - -/** - * @Author jack - * @Date:2019/7/4 11:36 - */ -@FXController(path = "moveDemo.fxml") -@FXWindow(title = "hello", resizable = true, draggable = true) -public class Main2 extends FXBaseController { - - @FXML - @FXBind({"layoutX=${bean.x}","layoutY=${bean.y}"}) - private Circle circle; - - @FXData - CircleBean bean = new CircleBean(); - - @FXML - @FXBind("text=${bean.x}") - private TextField xinput; - - @FXML - @FXBind("text=${bean.y}") - private TextField yinput; - - @FXML - private Button xSub; - - @FXML - private Button xAdd; - - @FXML - private Button ySub; - - @FXML - private Button yAdd; - @FXML - public void addX(){ - double x = bean.getX() + 5 ; - bean.setX(x); - System.out.println("? ? " + bean); - } - @FXML - public void subX(){ - double x = bean.getX() - 5 ; - bean.setX(x); - } - @FXML - public void addY(){ - double y = bean.getY() + 5 ; - bean.setY(y); - } - @FXML - public void subY(){ - double y = bean.getY() - 5 ; - bean.setY(y); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringController.java deleted file mode 100644 index 0f5975a..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringController.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXController; -import cn.edu.scau.biubiusuisui.annotation.FXWindow; -import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.entity.FXPlusContext; -import cn.edu.scau.biubiusuisui.example.Student; -import cn.edu.scau.biubiusuisui.factory.FXEntityFactory; -import cn.edu.scau.biubiusuisui.factory.FXFactory; -import javafx.beans.property.Property; -import javafx.fxml.FXML; -import javafx.scene.control.Label; -import javafx.stage.StageStyle; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @Author jack - * @Date:2019/7/4 11:36 - */ -@FXController(path = "springDemo.fxml") -//@Component -//@FXWindow(title = "hello",resizable = true,style = StageStyle.UNDECORATED) -public class SpringController extends FXBaseController { - - @Autowired - Student student; - - @Autowired - Student studentProxy; - - @FXML - Label label; - - int count = 1; - - @Override - public void initialize() { - System.out.println("為什麼"); - } - - @FXML - public void add(){ - System.out.println("add"); - } - - public Student getStudent() { - return student; - } - - public void setStudent(Student student) { - this.student = student; - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringDemo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringDemo.java deleted file mode 100644 index 1aa0595..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo/SpringDemo.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXScan; -import cn.edu.scau.biubiusuisui.config.FXPlusApplication; -import cn.edu.scau.biubiusuisui.factory.BeanBuilder; -import javafx.application.Application; -import javafx.stage.Stage; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * @Author jack - * @Date:2019/7/7 10:43 - */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.springDemo"}) -public class SpringDemo extends Application { - @Override - public void start(Stage primaryStage) throws Exception { - ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - FXPlusApplication.start(SpringDemo.class, new BeanBuilder() { - @Override - public Object getBean(Class type) { - return context.getBean(type); - } - }); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringController2.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringController2.java deleted file mode 100644 index affac22..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringController2.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springDemo2; - -import cn.edu.scau.biubiusuisui.annotation.FXController; -import cn.edu.scau.biubiusuisui.annotation.FXWindow; -import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.example.springDemo.SpringController; -import javafx.fxml.FXML; -import javafx.stage.StageStyle; -import org.springframework.stereotype.Component; - -/** - * @Author jack - * @Date:2019/7/4 11:36 - */ -@FXController(path = "springDemo2.fxml") -@Component -//@FXWindow(title = "hello",resizable = true,style = StageStyle.UNDECORATED) -public class SpringController2 extends FXBaseController { - - - @FXML - SpringController springController; - - int count = 1; - - @Override - public void initialize() { - - } - - @FXML - public void test(){ - System.out.println("student"+springController.getStudent()); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringDemo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringDemo.java deleted file mode 100644 index e023aae..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springDemo2/SpringDemo.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springDemo2; - -import cn.edu.scau.biubiusuisui.annotation.FXScan; -import cn.edu.scau.biubiusuisui.config.FXPlusApplication; -import cn.edu.scau.biubiusuisui.factory.BeanBuilder; -import javafx.application.Application; -import javafx.stage.Stage; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * @Author jack - * @Date:2019/7/7 10:43 - */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.springDemo2"}) -public class SpringDemo extends Application { - @Override - public void start(Stage primaryStage) throws Exception { - ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - FXPlusApplication.start(SpringDemo.class, new BeanBuilder() { - @Override - public Object getBean(Class type) { - return context.getBean(type); - } - }); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemo.java deleted file mode 100644 index becb05f..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemo.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springExpressionDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXScan; -import cn.edu.scau.biubiusuisui.config.FXPlusApplication; -import cn.edu.scau.biubiusuisui.example.springDemo.SpringDemo; -import cn.edu.scau.biubiusuisui.factory.BeanBuilder; -import javafx.application.Application; -import javafx.stage.Stage; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * @Author jack - * @Date:2019/6/25 7:05 - */ -@FXScan(base = {"cn.edu.scau.biubiusuisui.example.springExpressionDemo"}) -//项目目录中带有中文字符会导致无法启动 -public class SpringExpressionDemo extends Application { - @Override - public void start(Stage primaryStage) throws Exception { - ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - FXPlusApplication.start(SpringExpressionDemo.class, new BeanBuilder() { - @Override - public Object getBean(Class type) { - return context.getBean(type); - } - }); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemoController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemoController.java deleted file mode 100644 index 7c4e583..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/example/springExpressionDemo/SpringExpressionDemoController.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.edu.scau.biubiusuisui.example.springExpressionDemo; - -import cn.edu.scau.biubiusuisui.annotation.FXBind; -import cn.edu.scau.biubiusuisui.annotation.FXController; -import cn.edu.scau.biubiusuisui.annotation.FXData; -import cn.edu.scau.biubiusuisui.annotation.FXWindow; -import cn.edu.scau.biubiusuisui.entity.FXBaseController; -import cn.edu.scau.biubiusuisui.example.Student; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.Label; -import javafx.scene.control.PasswordField; -import javafx.scene.control.TextField; -import javafx.stage.StageStyle; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * @Author jack - * @Date:2019/7/4 11:36 - */ -@FXController(path = "SpringExpressionDemo.fxml") -@Component -@FXWindow(title = "hello", resizable = true, style = StageStyle.UNDECORATED,draggable = true) -public class SpringExpressionDemoController extends FXBaseController { - - - - - - @FXData - @Autowired - @FXBind( - { - "name=${usr.text}", - "password=${psw.text}" - } - ) - Student student; - - - @FXML - private Label label; - - @FXML - private TextField usr; - - @FXML - private Button resetBtn; - - @FXML - private Button loginBtn; - - @FXML - private Label usrMsg; - - @FXML - private PasswordField psw; - - @FXML - private Label pswMsg; - - @FXML - void login(ActionEvent event) { - System.out.println("user:" + student.getName()); - System.out.println("psw:"+student.getPassword()); - if("admin".equals(student.getName())&&"admin".equals(student.getPassword())){ - System.out.println("Ok"); - }else{ - System.out.println("fail"); - } - } - - @FXML - void reset(ActionEvent event) { - psw.setText(""); - usr.setText(""); - } - - -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/exception/NoSuchChangeMethod.java b/src/main/java/cn/edu/scau/biubiusuisui/exception/NoSuchChangeMethod.java new file mode 100644 index 0000000..5b8ff85 --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/exception/NoSuchChangeMethod.java @@ -0,0 +1,12 @@ +package cn.edu.scau.biubiusuisui.exception; + +/** + * @Author jack + * @Date:2019/7/27 3:00 + */ +public class NoSuchChangeMethod extends Exception { + + public NoSuchChangeMethod() { + super("No such change method"); + } +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/BindParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/BindParser.java new file mode 100644 index 0000000..c6dcda1 --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/BindParser.java @@ -0,0 +1,9 @@ +package cn.edu.scau.biubiusuisui.expression; + +/** + * @Author jack + * @Date:2019/7/27 2:02 + */ +public interface BindParser { + public void parse(Object target,String expression); +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/ExpressionParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/ExpressionParser.java deleted file mode 100644 index 4e018c8..0000000 --- a/src/main/java/cn/edu/scau/biubiusuisui/expression/ExpressionParser.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.edu.scau.biubiusuisui.expression; - - -import com.sun.istack.internal.NotNull; -import com.sun.javafx.fxml.expression.Expression; -import com.sun.javafx.fxml.expression.ExpressionValue; -import javafx.beans.property.Property; - -/** - * 将FXBind中表达式建立绑定 - * 格式如下 - * 语法如下: - * FXBind("S") - * S -> left=right - * left -> property - * right -> ${expression} - * expression -> bean.field - * - * FXBind("text=${bean.field}) - * textProperty 通过 adapter.getModelProeprty --> textProperty实例 - * bean 通过namespace 获取,因为bean有FXEntity标签,所以返回包装过后的bean的property - * 最后 - * left.bind(right) - * - * @Author jack - * @Date:2019/7/23 15:05 - */ -public class ExpressionParser { - - private Object namespace; - private static final String BIND_PREFIX = "${"; - private static final String BIND_SUFIX = "}"; - private static final String PROEPRTY = "Property"; - - - - public ExpressionParser(Object namespace) { - this.namespace = namespace; - } - - private Property getLeftProperty(MyBeanAdapter myBeanAdapter, String key) { - return (Property) myBeanAdapter.getPropertyModel(key); - } - - private MyExpressionValue getRightExpreesion(MyBeanAdapter myBeanAdapter,String key ,String rightExpression) { - Expression expression = Expression.valueOf(rightExpression); - Class clazz = myBeanAdapter.getType(key); - MyExpressionValue myExpressionValue = new MyExpressionValue(namespace, expression, clazz); - return myExpressionValue; - } - - public void parse(Object object, @NotNull String expression) { - //check expression - int index = expression.indexOf("="); - if (index == -1) { - return; - } - String[] items = expression.split("="); - if (items.length != 2) { - return; - } - String left = items[0]; - String right = items[1]; - if (left == null || right == null) { - return; - } - right = right.trim(); - - if (right.startsWith(BIND_PREFIX) && right.endsWith(BIND_SUFIX)){ - int length = right.length(); - right = right.substring(2,length-1); - } - MyBeanAdapter myBeanAdapter = new MyBeanAdapter(object); - Property leftProperty = getLeftProperty(myBeanAdapter, left); - MyExpressionValue rightProperty = getRightExpreesion(myBeanAdapter,left,right); - leftProperty.bind(rightProperty); - } -} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java new file mode 100644 index 0000000..753d7be --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/action/ChangeParser.java @@ -0,0 +1,17 @@ +package cn.edu.scau.biubiusuisui.expression.action; + +import cn.edu.scau.biubiusuisui.expression.BindParser; + +/** + * @Author jack + * @Date:2019/7/27 2:03 + */ +public class ChangeParser implements BindParser { + + @Override + public void parse(Object target, String expression) { + + } + + +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpFunction.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpFunction.java new file mode 100644 index 0000000..2c8ff56 --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpFunction.java @@ -0,0 +1,10 @@ +package cn.edu.scau.biubiusuisui.expression.data; + +/** + * @Author jack + * @Date:2019/7/27 20:03 + */ +@FunctionalInterface +public interface ExpFunction{ + R apply(T t, U u); +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java new file mode 100644 index 0000000..9e31c70 --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParser.java @@ -0,0 +1,185 @@ +package cn.edu.scau.biubiusuisui.expression.data; + + +import cn.edu.scau.biubiusuisui.annotation.FXValue; +import cn.edu.scau.biubiusuisui.exception.NoSuchChangeMethod; +import com.sun.istack.internal.NotNull; +import com.sun.javafx.fxml.expression.Expression; +import com.sun.javafx.fxml.expression.VariableExpression; +import javafx.beans.property.Property; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.NoSuchElementException; + +/** + * 将FXBind中表达式建立绑定 + * 格式如下 + * 语法如下: + * FXBind("S") + * S -> left=right + * left -> property + * right -> ${expression} + * expression -> bean.field + *

+ * FXBind("text=${bean.field}) + * textProperty 通过 adapter.getModelProeprty --> textProperty实例 + * bean 通过namespace 获取,因为bean有FXEntity标签,所以返回包装过后的bean的property + * 最后 + * left.bind(right) + * + * @Author jack + * @Date:2019/7/23 15:05 + */ +public class ExpressionParser { + + private Object namespace; + private Object targetController; + private static final String BIND_PREFIX = "${"; + private static final String BIND_SUFIX = "}"; + private static final String PROEPRTY = "Property"; + + public enum ExpressionType { + DataExpression, + ActionExpression + } + + public ExpressionParser(Object namespace, Object targetController) { + this.namespace = namespace; + this.targetController = targetController; + } + + public ExpressionParser(Object namespace) { + this.namespace = namespace; + } + + private Property getLeftProperty(MyBeanAdapter myBeanAdapter, String key) { + return (Property) myBeanAdapter.getPropertyModel(key); + } + + private static final String FUNCTION_PREFIX = "@"; + + private MyExpressionValue getRightExpreesion(MyBeanAdapter myBeanAdapter, String key, String rightExpression) { + Expression expression = null; + if (rightExpression.startsWith(FUNCTION_PREFIX)) { + expression = getFunctionExpression(rightExpression); + } else { + expression = Expression.valueOf(rightExpression); + } + Class clazz = myBeanAdapter.getType(key); + MyExpressionValue myExpressionValue = new MyExpressionValue(namespace, expression, clazz); + return myExpressionValue; + } + + private Expression getFunctionExpression(String rightExpression) { + Expression expression = null; + int indexLeft = rightExpression.indexOf("("); + String methodName = rightExpression.substring(1,indexLeft); + int indexRight = rightExpression.indexOf(")"); + String argString = rightExpression.substring(indexLeft + 1, indexRight); + String[] args = null; + if(!"".equals(argString.trim())) { + args = argString.split(","); + } + Class clazz = targetController.getClass(); + Method[] methods = clazz.getMethods(); + Expression[] expressions = null; + if(args!=null) { + expressions = new Expression[args.length]; + for (int i = 0; i < args.length; i++) { + if (!"".equals(args[i].trim())) { + expressions[i] = Expression.valueOf(args[i]); + } + } + } + for (Method method : methods) { + if (method.getName().equals(methodName)) { + expression = new FunctionExpression(method, targetController, expressions); + } + } + return expression; + } + + public void parse(Object object, @NotNull String expression) throws NoSuchChangeMethod { + //check expression + int index = expression.indexOf("="); + if (index == -1) { + return; + } + String[] items = expression.split("="); + if (items.length != 2) { + return; + } + String left = items[0]; + String right = items[1]; + if (left == null || right == null) { + return; + } + right = right.trim(); + ExpressionType expressionType; + if (right.startsWith(BIND_PREFIX) && right.endsWith(BIND_SUFIX)) { + int length = right.length(); + right = right.substring(2, length - 1); + expressionType = ExpressionType.DataExpression; + } else { + right = right.substring(1); //#changeMethod -> changeMethod + expressionType = ExpressionType.ActionExpression; + } + MyBeanAdapter myBeanAdapter = new MyBeanAdapter(object); + Property leftProperty = getLeftProperty(myBeanAdapter, left); + switch (expressionType) { + case DataExpression: + bindDataExpression(left, right, myBeanAdapter, leftProperty); + break; + case ActionExpression: + // + bindActionExpression(right, leftProperty); + } + + } + + private void bindActionExpression(String right, Property leftProperty) throws NoSuchChangeMethod { + Class clazz = targetController.getClass(); + Method[] methods = clazz.getMethods(); + for (Method method : methods) { + if (method.getName().equals(right)) { + leftProperty.addListener((observable, oldValue, newValue) -> { + try { + Object[] objects = getArgs(method, observable, newValue, oldValue); + method.invoke(targetController, objects); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + }); + } + } + } + + private void bindDataExpression(String left, String right, MyBeanAdapter myBeanAdapter, Property leftProperty) { + MyExpressionValue rightProperty = getRightExpreesion(myBeanAdapter, left, right); + leftProperty.bind(rightProperty); + } + + public Object[] getArgs(Method method, Object... args) { + Parameter[] parameters = method.getParameters(); + Object[] objects = new Object[parameters.length]; + for (int i = 0; i < parameters.length; i++) { + FXValue annotation = parameters[i].getAnnotation(FXValue.class); + switch (annotation.value()) { + case "target": + objects[i] = args[0]; + break; + case "newValue": + objects[i] = args[1]; + break; + case "oldValue": + objects[i] = args[2]; + break; + } + } + return objects; + } +} diff --git a/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java new file mode 100644 index 0000000..553600f --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/expression/data/FunctionExpression.java @@ -0,0 +1,85 @@ +package cn.edu.scau.biubiusuisui.expression.data; + +import com.sun.javafx.fxml.expression.Expression; +import com.sun.javafx.fxml.expression.KeyPath; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author jack + * @Date:2019/7/27 20:00 + */ +public class FunctionExpression extends Expression { + + private Method method; + private Object target; + private Expression []args; + + public FunctionExpression(Method method, Object target, Expression[]expressions) { + this.method = method; + this.target = target; + this.args = expressions; + } + + @Override + public List getArguments() { + List list = new ArrayList<>(); + if(args !=null) { + for (Expression expression : args) { + list.addAll(expression.getArguments()); + } + } + return list; + } + + @Override + public Object evaluate(Object namespace) { + Object result = null; + if(args!=null){ + Object[] values = new Object[args.length]; + for(int i = 0 ;i { // Monitors a namespace for changes along a key path diff --git a/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java b/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java index 2820f11..f8ac721 100644 --- a/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java +++ b/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java @@ -7,7 +7,8 @@ import cn.edu.scau.biubiusuisui.annotation.FXWindow; import cn.edu.scau.biubiusuisui.config.FXMLLoaderPlus; import cn.edu.scau.biubiusuisui.entity.FXBaseController; import cn.edu.scau.biubiusuisui.entity.FXPlusContext; -import cn.edu.scau.biubiusuisui.expression.ExpressionParser; +import cn.edu.scau.biubiusuisui.exception.NoSuchChangeMethod; +import cn.edu.scau.biubiusuisui.expression.data.ExpressionParser; import cn.edu.scau.biubiusuisui.function.FXWindowParser; import cn.edu.scau.biubiusuisui.messageQueue.MessageQueue; import cn.edu.scau.biubiusuisui.proxy.FXControllerProxy; @@ -16,7 +17,6 @@ import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; -import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.net.URL; @@ -249,7 +249,7 @@ public class FXFactory { private static void parseBind(ObservableMap namespace, Object object, Field field) { FXBind fxBind = field.getAnnotation(FXBind.class); field.setAccessible(true); - ExpressionParser expressionParser = new ExpressionParser(namespace); + ExpressionParser expressionParser = new ExpressionParser(namespace,object); if (fxBind != null) { String[] expressions = fxBind.value(); try { @@ -259,6 +259,8 @@ public class FXFactory { } } catch (IllegalAccessException e) { e.printStackTrace(); + } catch (NoSuchChangeMethod noSuchChangeMethod) { + noSuchChangeMethod.printStackTrace(); } } } diff --git a/src/main/java/cn/edu/scau/biubiusuisui/function/Draggale.java b/src/main/java/cn/edu/scau/biubiusuisui/function/Draggale.java new file mode 100644 index 0000000..e0bdd4b --- /dev/null +++ b/src/main/java/cn/edu/scau/biubiusuisui/function/Draggale.java @@ -0,0 +1,9 @@ +package cn.edu.scau.biubiusuisui.function; + +/** + * @Author jack + * @Date:2019/7/27 1:54 + */ +public interface Draggale { + +} diff --git a/src/main/resources/Main2.fxml b/src/main/resources/Main2.fxml index 34b16b4..e4783c8 100644 --- a/src/main/resources/Main2.fxml +++ b/src/main/resources/Main2.fxml @@ -1,6 +1,6 @@ - + diff --git a/src/main/resources/actionDemo.fxml b/src/main/resources/actionDemo.fxml new file mode 100644 index 0000000..8c0c289 --- /dev/null +++ b/src/main/resources/actionDemo.fxml @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java index 6f2fa52..fa8d629 100644 --- a/src/test/java/MainTest.java +++ b/src/test/java/MainTest.java @@ -1,14 +1,19 @@ -import cn.edu.scau.biubiusuisui.example.Student; -import cn.edu.scau.biubiusuisui.factory.FXEntityFactory; import org.junit.Test; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; + /** * @Author jack * @Date:2019/6/25 2:11 */ public class MainTest { + + public void testMethod(String a,int b){ + + } @Test - public void test(){ + public void test() throws NoSuchMethodException { } } diff --git a/src/test/java/cn/edu/scau/biubiusuisui/expression/ExpressionParserTest.java b/src/test/java/cn/edu/scau/biubiusuisui/expression/ExpressionParserTest.java index 015b195..f6c68c0 100644 --- a/src/test/java/cn/edu/scau/biubiusuisui/expression/ExpressionParserTest.java +++ b/src/test/java/cn/edu/scau/biubiusuisui/expression/ExpressionParserTest.java @@ -1,43 +1,13 @@ package cn.edu.scau.biubiusuisui.expression; -import cn.edu.scau.biubiusuisui.annotation.FXEntity; -import cn.edu.scau.biubiusuisui.example.Student; -import cn.edu.scau.biubiusuisui.factory.FXEntityFactory; -import javafx.application.Application; -import javafx.collections.FXCollections; -import javafx.collections.ObservableMap; -import javafx.scene.control.Label; + import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Stage; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.*; /** * @Author jack * @Date:2019/7/24 11:55 */ -public class ExpressionParserTest extends Application{ +public class ExpressionParserTest { - @Override - public void start(Stage primaryStage) throws Exception { - // test - ok - Label label = new Label("text"); - ObservableMap namespace = FXCollections.observableHashMap(); - Student student = new Student(); - Student studentProxy = (Student) FXEntityFactory.createJavaBeanProxy(student); - studentProxy.setName("jack"); - namespace.put("student", studentProxy); - ExpressionParser expressionParser = new ExpressionParser(namespace); - expressionParser.parse(label,"text=${student.name}"); - System.out.println(label.textProperty()); - studentProxy.setName("jack-modified"); - System.out.println(label.textProperty()); - System.out.println(label.textProperty().getValue()); - } - - public void testValueFactory(){ - new PropertyValueFactory("password"); - } } \ No newline at end of file diff --git a/src/test/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParserTest.java b/src/test/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParserTest.java new file mode 100644 index 0000000..690bc2c --- /dev/null +++ b/src/test/java/cn/edu/scau/biubiusuisui/expression/data/ExpressionParserTest.java @@ -0,0 +1,30 @@ +package cn.edu.scau.biubiusuisui.expression.data; + +import cn.edu.scau.biubiusuisui.annotation.FXValue; +import org.junit.Before; +import org.junit.Test; + +import java.lang.reflect.Method; + +import static org.junit.Assert.*; + +/** + * @Author jack + * @Date:2019/7/27 3:13 + */ +public class ExpressionParserTest { + + private ExpressionParser expressionParser; + @Before + public void init(){ + expressionParser = new ExpressionParser(null); + } + @Test + public void parse() { + } + + @Test + public void getArgs() throws NoSuchMethodException { + + } +} \ No newline at end of file diff --git a/src/test/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactoryTest.java b/src/test/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactoryTest.java index 864532e..ce4ae3e 100644 --- a/src/test/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactoryTest.java +++ b/src/test/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactoryTest.java @@ -1,7 +1,5 @@ package cn.edu.scau.biubiusuisui.factory; -import cn.edu.scau.biubiusuisui.entity.FXPlusContext; -import cn.edu.scau.biubiusuisui.example.Student; import org.junit.Test; /** @@ -36,12 +34,12 @@ public class FXEntityFactoryTest { @Test public void createJavaBeanProxy2() throws InstantiationException, IllegalAccessException { - Student student1 = (Student) FXEntityFactory.createJavaBeanProxy(Student.class); - System.out.println(student1); - FXPlusContext.getProxyByBeanObject(student1).getStringPropertyMap().forEach((k, v)->{ - System.out.println("k " +k +"v" + v); - }); - student1.setName("Jack"); +// Student student1 = (Student) FXEntityFactory.createJavaBeanProxy(Student.class); +// System.out.println(student1); +// FXPlusContext.getProxyByBeanObject(student1).getStringPropertyMap().forEach((k, v)->{ +// System.out.println("k " +k +"v" + v); +// }); +// student1.setName("Jack"); } @Test