diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 34abd6a..c8aa7af 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -8,10 +8,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -40,38 +74,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -79,57 +138,10 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -137,8 +149,8 @@
-
-
+
+
@@ -146,37 +158,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -226,61 +212,62 @@
+
@@ -321,14 +308,13 @@
+
-
-
@@ -339,193 +325,87 @@
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -544,6 +424,8 @@
+
+
@@ -553,7 +435,7 @@
-
+
@@ -566,14 +448,17 @@
-
-
+
+
+
+
+
@@ -700,7 +585,14 @@
-
+
+
+
+
+
+
+
+
1561745555309
@@ -716,7 +608,14 @@
1561784636283
-
+
+ 1561785337690
+
+
+
+ 1561785337691
+
+
@@ -752,7 +651,7 @@
-
+
@@ -764,10 +663,9 @@
-
-
+
-
+
@@ -776,17 +674,17 @@
-
+
-
+
-
-
-
+
+
+
@@ -878,192 +776,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1103,13 +816,6 @@
-
-
-
-
-
-
-
@@ -1117,16 +823,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -1138,24 +834,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1163,16 +841,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -1183,32 +851,20 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -1217,56 +873,204 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -1275,18 +1079,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -1295,30 +1089,50 @@
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/out/artifacts/JavaFx_Plus_jar/JavaFx-Plus.jar b/out/artifacts/JavaFx_Plus_jar/JavaFx-Plus.jar
index d9749e8..ed9e3cf 100644
Binary files a/out/artifacts/JavaFx_Plus_jar/JavaFx-Plus.jar and b/out/artifacts/JavaFx_Plus_jar/JavaFx-Plus.jar differ
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXWindow.java b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXWindow.java
index 5989812..1cef591 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXWindow.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/annotation/FXWindow.java
@@ -1,5 +1,7 @@
package cn.edu.scau.biubiusuisui.annotation;
+import javafx.stage.StageStyle;
+
import java.lang.annotation.*;
/**
@@ -12,5 +14,11 @@ import java.lang.annotation.*;
public @interface FXWindow {
double preWidth() default 0.0;
double preHeight()default 0.0;
+ double minWidth() default 0.0;
+ double minHeight() default 0.0;
+ boolean fix() default false;
+ boolean dragable() default false;
+
+ StageStyle style() default StageStyle.DECORATED;
String title () ;
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/entity/FXBaseController.java b/src/main/java/cn/edu/scau/biubiusuisui/entity/FXBaseController.java
index 221a2e8..64c3f37 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/entity/FXBaseController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/entity/FXBaseController.java
@@ -5,6 +5,7 @@ import cn.edu.scau.biubiusuisui.config.FXMLLoaderPlus;
import javafx.fxml.Initializable;
import javafx.scene.layout.Pane;
import cn.edu.scau.biubiusuisui.utils.StringUtils;
+import javafx.stage.Stage;
import java.io.IOException;
import java.lang.annotation.Annotation;
@@ -29,6 +30,9 @@ public class FXBaseController extends Pane {
protected String name = "";
+
+ private Stage stage;
+
private boolean isController = false;
private boolean isWindows = false;
@@ -94,4 +98,12 @@ public class FXBaseController extends Pane {
public void setWindows(boolean windows) {
isWindows = windows;
}
+
+ public Stage getStage() {
+ return stage;
+ }
+
+ public void setStage(Stage stage) {
+ this.stage = stage;
+ }
}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/entity/FXFieldViewFieldMapping.java b/src/main/java/cn/edu/scau/biubiusuisui/entity/FXFieldViewFieldMapping.java
deleted file mode 100644
index 886dd3f..0000000
--- a/src/main/java/cn/edu/scau/biubiusuisui/entity/FXFieldViewFieldMapping.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cn.edu.scau.biubiusuisui.entity;
-
-import javafx.beans.property.Property;
-import javafx.beans.value.ObservableValue;
-
-import java.lang.reflect.Method;
-
-/**
- * @Author jack
- * @Date:2019/6/28 10:03
- */
-public class FXFieldViewFieldMapping {
-
- private boolean readOnly;
- private Class type;
-
-
- public boolean isReadOnly() {
- return readOnly;
- }
-
- public void setReadOnly(boolean readOnly) {
- this.readOnly = readOnly;
- }
-
- public Class getType() {
- return type;
- }
-
- public void setType(Class type) {
- this.type = type;
- }
-}
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/Demo.java b/src/main/java/cn/edu/scau/biubiusuisui/example/Demo.java
index bd52d44..eda6a19 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/Demo.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/Demo.java
@@ -10,6 +10,7 @@ import javafx.stage.Stage;
* @Date:2019/6/25 7:05
*/
@FXScan(base = {"cn.edu.scau.biubiusuisui.example"})
+//项目目录中带有中文字符会导致无法启动
public class Demo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/example/MainController.java b/src/main/java/cn/edu/scau/biubiusuisui/example/MainController.java
index bb05cc2..47e18ad 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/example/MainController.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/example/MainController.java
@@ -10,6 +10,7 @@ import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
+import javafx.stage.StageStyle;
import java.net.URL;
import java.util.ResourceBundle;
@@ -19,7 +20,7 @@ import java.util.ResourceBundle;
* @Date:2019/6/25 1:47
*/
@FXController(path = "Main.fxml")
-@FXWindow(title = "demo1")
+@FXWindow(title = "demo1",dragable = true,fix = true,style = StageStyle.UNDECORATED)
public class MainController extends FXBaseController{
@FXML
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.java b/src/main/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.java
index a24ca06..a1f05ea 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.java
@@ -1,7 +1,7 @@
package cn.edu.scau.biubiusuisui.factory;
import cn.edu.scau.biubiusuisui.annotation.FXField;
-import cn.edu.scau.biubiusuisui.entity.FXFieldViewFieldMapping;
+import cn.edu.scau.biubiusuisui.entity.FXFieldPropertyMapping;
import cn.edu.scau.biubiusuisui.entity.FXPlusContext;
import cn.edu.scau.biubiusuisui.proxy.classProxy.FXEntityProxy;
import cn.edu.scau.biubiusuisui.utils.ClassUtils;
@@ -50,7 +50,7 @@ public class FXEntityFactory {
public static void processFXEntityProxy(Object entity, Object proxy,FXEntityProxy fxEntityProxy) throws IllegalAccessException {
Map stringPropertyMap = new HashMap<>();
- Map stringFXFieldMethodMappingMap = new HashMap<>();
+ Map fxFieldPropertyMappingHashMap = new HashMap<>();
Field []fields = entity.getClass().getDeclaredFields();
for(Field field:fields){
Annotation annotation = ClassUtils.getAnnotationInList( FXField.class,field.getDeclaredAnnotations());
@@ -59,10 +59,11 @@ public class FXEntityFactory {
field.setAccessible(true);
FXField fxField = (FXField)annotation;
- FXFieldViewFieldMapping fieldMethodMapping = new FXFieldViewFieldMapping();
- fieldMethodMapping.setReadOnly(fxField.readOnly());
- fieldMethodMapping.setType(field.getType());
- stringFXFieldMethodMappingMap.put(field.getName(), fieldMethodMapping);
+ FXFieldPropertyMapping fieldPropertyMapping = new FXFieldPropertyMapping();
+ fieldPropertyMapping.setReadOnly(fxField.readOnly());
+ fieldPropertyMapping.setType(field.getType());
+
+ fxFieldPropertyMappingHashMap.put(field.getName(), fieldPropertyMapping);
if(field.get(entity) == null){
property = getFieldDefalutProperty(field);
@@ -88,7 +89,7 @@ public class FXEntityFactory {
}
}
fxEntityProxy.setStringPropertyMap(stringPropertyMap);
- fxEntityProxy.setStringFXFieldMethodMappingMap(stringFXFieldMethodMappingMap);
+ fxEntityProxy.setFxFieldPropertyMappingMap(fxFieldPropertyMappingHashMap);
}
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 b6986f6..2b684b6 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/factory/FXFactory.java
@@ -5,6 +5,9 @@ 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.function.DragWindowHandlerImpl;
+import cn.edu.scau.biubiusuisui.parser.WindowAnnotationParser;
+import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
@@ -21,10 +24,10 @@ import java.net.URL;
*/
public class FXFactory {
-
+ private static WindowAnnotationParser windowAnnotationParser = new WindowAnnotationParser();;
private FXFactory() {
- }
+ }
public static void loadFXController(Class clazz) {
getFXController(clazz, "");
@@ -105,11 +108,13 @@ public class FXFactory {
register(fxBaseController, fxControllerProxy);
if (isWindow) {
Stage stage = new Stage();
- double preWidth = fxWindow.preWidth() == 0 ? parent.getPrefWidth() : fxWindow.preWidth();
- double preHeight = fxWindow.preHeight() == 0 ? parent.getPrefWidth() : fxWindow.preHeight();
+ fxControllerProxy.setStage(stage);
+ fxBaseController.setStage(stage);
+ double preWidth = fxWindow.preWidth() == 0 ? fxControllerProxy.getPrefWidth() : fxWindow.preWidth();
+ double preHeight = fxWindow.preHeight() == 0 ? fxControllerProxy.getPrefWidth() : fxWindow.preHeight();
Scene scene = new Scene(fxControllerProxy, preWidth, preHeight);
stage.setScene(scene);
- stage.setTitle(fxWindow.title());
+ windowAnnotationParser.parse(stage, fxControllerProxy, fxWindow);
stage.show();
}
return fxControllerProxy;
diff --git a/src/main/java/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.java b/src/main/java/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.java
index 840d200..3c6b87e 100644
--- a/src/main/java/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.java
+++ b/src/main/java/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.java
@@ -1,6 +1,6 @@
package cn.edu.scau.biubiusuisui.proxy.classProxy;
-import cn.edu.scau.biubiusuisui.entity.FXFieldViewFieldMapping;
+import cn.edu.scau.biubiusuisui.entity.FXFieldPropertyMapping;
import cn.edu.scau.biubiusuisui.utils.StringUtils;
import javafx.beans.property.*;
import net.sf.cglib.proxy.Enhancer;
@@ -19,7 +19,7 @@ public class FXEntityProxy implements MethodInterceptor {
Object target;
private Map stringPropertyMap;
- private Map stringFXFieldMethodMappingMap;
+ private Map fxFieldPropertyMappingMap;
public Object getInstance(Object target) {
this.target = target;
@@ -50,13 +50,13 @@ public class FXEntityProxy implements MethodInterceptor {
} else {
return o1;
}
- FXFieldViewFieldMapping fieldMethodMapping = stringFXFieldMethodMappingMap.get(fieldName);
+ FXFieldPropertyMapping fxFieldPropertyMapping = fxFieldPropertyMappingMap.get(fieldName);
Property property = stringPropertyMap.get(fieldName);
- if(fieldMethodMapping == null || property == null){
+ if(fxFieldPropertyMapping == null || property == null){
return o1;
}
- Class type = fieldMethodMapping.getType();
+ Class type = fxFieldPropertyMapping.getType();
if (methodName.startsWith("set")) {
if(Boolean.class.equals(type)){
((SimpleBooleanProperty)property).set((Boolean)objects[0]);
@@ -75,6 +75,8 @@ public class FXEntityProxy implements MethodInterceptor {
((SimpleListProperty)(property)).add(objects[0]);
}else if(methodName.startsWith("del")){
((SimpleListProperty)(property)).remove(objects[0]);
+ }else if(methodName.startsWith("cls")){
+ ((SimpleListProperty)(property)).clear();
}
//修改
@@ -101,11 +103,11 @@ public class FXEntityProxy implements MethodInterceptor {
this.stringPropertyMap = stringPropertyMap;
}
- public Map getStringFXFieldMethodMappingMap() {
- return stringFXFieldMethodMappingMap;
+ public Map getFxFieldPropertyMappingMap() {
+ return fxFieldPropertyMappingMap;
}
- public void setStringFXFieldMethodMappingMap(Map stringFXFieldMethodMappingMap) {
- this.stringFXFieldMethodMappingMap = stringFXFieldMethodMappingMap;
+ public void setFxFieldPropertyMappingMap(Map fxFieldPropertyMappingMap) {
+ this.fxFieldPropertyMappingMap = fxFieldPropertyMappingMap;
}
}
diff --git a/target/classes/Main.fxml b/target/classes/Main.fxml
index e71a680..d11c5e3 100644
--- a/target/classes/Main.fxml
+++ b/target/classes/Main.fxml
@@ -6,8 +6,8 @@
-
-
-
+
+
+
diff --git a/target/classes/cn/edu/scau/biubiusuisui/annotation/FXWindow.class b/target/classes/cn/edu/scau/biubiusuisui/annotation/FXWindow.class
index aea4606..9a7b31f 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/annotation/FXWindow.class and b/target/classes/cn/edu/scau/biubiusuisui/annotation/FXWindow.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/entity/FXBaseController.class b/target/classes/cn/edu/scau/biubiusuisui/entity/FXBaseController.class
index b288fb8..c5f6c77 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/entity/FXBaseController.class and b/target/classes/cn/edu/scau/biubiusuisui/entity/FXBaseController.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/example/Demo.class b/target/classes/cn/edu/scau/biubiusuisui/example/Demo.class
index 196cf72..ed4c89e 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/example/Demo.class and b/target/classes/cn/edu/scau/biubiusuisui/example/Demo.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/example/MainController.class b/target/classes/cn/edu/scau/biubiusuisui/example/MainController.class
index 187c6b0..5c518be 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/example/MainController.class and b/target/classes/cn/edu/scau/biubiusuisui/example/MainController.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.class b/target/classes/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.class
index f18101b..885ed4a 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.class and b/target/classes/cn/edu/scau/biubiusuisui/factory/FXEntityFactory.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/factory/FXFactory.class b/target/classes/cn/edu/scau/biubiusuisui/factory/FXFactory.class
index e0afa45..8413b9d 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/factory/FXFactory.class and b/target/classes/cn/edu/scau/biubiusuisui/factory/FXFactory.class differ
diff --git a/target/classes/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.class b/target/classes/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.class
index b7f88cf..44d41db 100644
Binary files a/target/classes/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.class and b/target/classes/cn/edu/scau/biubiusuisui/proxy/classProxy/FXEntityProxy.class differ