Skip to content

Commit fdf47b0

Browse files
committed
newui: 实现插件项目创建工具表单
1 parent c3194bc commit fdf47b0

5 files changed

Lines changed: 158 additions & 24 deletions

File tree

src/main/java/com/xwintop/xJavaFxTool/newui/NewLauncherController.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,30 @@
44
import com.xwintop.xJavaFxTool.controller.IndexController;
55
import com.xwintop.xJavaFxTool.controller.index.PluginManageController;
66
import com.xwintop.xJavaFxTool.model.PluginJarInfo;
7+
import com.xwintop.xJavaFxTool.newui.creator.CreatePluginProjectService;
8+
import com.xwintop.xJavaFxTool.newui.creator.PluginProjectInfo;
79
import com.xwintop.xJavaFxTool.plugin.PluginManager;
810
import com.xwintop.xJavaFxTool.services.index.SystemSettingService;
911
import com.xwintop.xcore.javafx.FxApp;
1012
import com.xwintop.xcore.javafx.dialog.FxAlerts;
1113
import com.xwintop.xcore.javafx.dialog.FxDialog;
1214
import com.xwintop.xcore.util.javafx.JavaFxViewUtil;
13-
import java.awt.Desktop;
14-
import java.io.IOException;
15-
import java.net.URI;
16-
import java.util.ArrayList;
17-
import java.util.HashMap;
18-
import java.util.List;
19-
import java.util.Map;
20-
import java.util.ResourceBundle;
2115
import javafx.beans.Observable;
2216
import javafx.fxml.FXMLLoader;
2317
import javafx.scene.Parent;
24-
import javafx.scene.control.ButtonType;
25-
import javafx.scene.control.CheckMenuItem;
26-
import javafx.scene.control.ContextMenu;
27-
import javafx.scene.control.Hyperlink;
28-
import javafx.scene.control.TabPane;
2918
import javafx.scene.control.TextField;
19+
import javafx.scene.control.*;
3020
import javafx.scene.layout.VBox;
3121
import javafx.scene.web.WebView;
3222
import lombok.extern.slf4j.Slf4j;
3323
import org.apache.commons.lang3.StringUtils;
3424

25+
import java.awt.*;
26+
import java.io.IOException;
27+
import java.net.URI;
28+
import java.util.List;
29+
import java.util.*;
30+
3531
@Slf4j
3632
public class NewLauncherController {
3733

@@ -109,7 +105,7 @@ private void loadPlugins() {
109105
String menuParentTitle = jarInfo.getMenuParentTitle();
110106
if (menuParentTitle != null) {
111107

112-
String categoryName = jarInfo.getIsFavorite()?
108+
String categoryName = jarInfo.getIsFavorite() ?
113109
FAVORITE_CATEGORY_NAME : menuResourceBundle.getString(menuParentTitle);
114110

115111
PluginCategoryController category = categoryControllers.computeIfAbsent(
@@ -178,7 +174,15 @@ public void openPluginCreator() {
178174
PluginCreatorController controller = dialog.show();
179175

180176
dialog
181-
.setButtonHandler(ButtonType.OK, (actionEvent, stage) -> stage.close())
177+
.setButtonHandler(ButtonType.OK, (actionEvent, stage) -> {
178+
if (controller.isStartCreation()) {
179+
PluginProjectInfo info = controller.getPluginProjectInfo();
180+
CreatePluginProjectService.getInstance().createProject(info);
181+
FxAlerts.info("创建成功", "项目 '" + info.getArtifactId() + "' 已经创建完毕。");
182+
// todo open directory
183+
}
184+
stage.close();
185+
})
182186
.setButtonHandler(ButtonType.CANCEL, (actionEvent, stage) -> stage.close());
183187
}
184188
}

src/main/java/com/xwintop/xJavaFxTool/newui/PluginCreatorController.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
package com.xwintop.xJavaFxTool.newui;
22

3+
import com.xwintop.xJavaFxTool.newui.creator.PluginProjectInfo;
4+
import com.xwintop.xcore.util.javafx.FileChooserUtil;
5+
import javafx.scene.Node;
36
import javafx.scene.control.Label;
7+
import javafx.scene.control.TextField;
8+
import javafx.scene.image.Image;
9+
import javafx.scene.image.ImageView;
410
import javafx.scene.layout.StackPane;
11+
import javafx.stage.FileChooser;
12+
13+
import java.io.File;
14+
import java.net.MalformedURLException;
515

616
public class PluginCreatorController {
717

@@ -13,11 +23,66 @@ public class PluginCreatorController {
1323
+ "\n3、熟悉 JavaFX 桌面框架。\n\n"
1424
+ "若想开始创建插件项目,请点击“下一步”。";
1525

26+
public TextField txtLocation;
27+
1628
public StackPane stackPane;
1729

1830
public Label txtWelcome;
1931

32+
public ImageView imgPluginLogo;
33+
34+
public TextField txtGroupId;
35+
36+
public TextField txtArtifactId;
37+
38+
public TextField txtVersion;
39+
40+
public TextField txtPluginName;
41+
42+
private boolean startCreation;
43+
44+
private void showStack(int index) {
45+
for (int i = 0; i < stackPane.getChildren().size(); i++) {
46+
Node node = stackPane.getChildren().get(i);
47+
node.setVisible(i == index);
48+
}
49+
}
50+
2051
public void initialize() {
2152
this.txtWelcome.setText(WELCOME);
2253
}
54+
55+
public void showCreatorForm() {
56+
showStack(1);
57+
this.startCreation = true;
58+
}
59+
60+
public boolean isStartCreation() {
61+
return startCreation;
62+
}
63+
64+
public void choosePluginLogo() {
65+
File imgFile = FileChooserUtil.chooseFile(
66+
new FileChooser.ExtensionFilter("图片文件", "*.png", "*.jpg")
67+
);
68+
69+
if (imgFile != null) {
70+
try {
71+
this.imgPluginLogo.setImage(new Image(imgFile.toURI().toURL().toExternalForm()));
72+
} catch (MalformedURLException e) {
73+
e.printStackTrace();
74+
}
75+
}
76+
}
77+
78+
public PluginProjectInfo getPluginProjectInfo() {
79+
PluginProjectInfo pluginProjectInfo = new PluginProjectInfo();
80+
pluginProjectInfo.setLocation(this.txtLocation.getText());
81+
pluginProjectInfo.setGroupId(this.txtGroupId.getText());
82+
pluginProjectInfo.setArtifactId(this.txtArtifactId.getText());
83+
pluginProjectInfo.setVersion(this.txtVersion.getText());
84+
pluginProjectInfo.setPluginName(this.txtPluginName.getText());
85+
pluginProjectInfo.setPluginLogo(this.imgPluginLogo.getImage());
86+
return pluginProjectInfo;
87+
}
2388
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.xwintop.xJavaFxTool.newui.creator;
2+
3+
public class CreatePluginProjectService {
4+
5+
private static final CreatePluginProjectService INSTANCE = new CreatePluginProjectService();
6+
7+
public static CreatePluginProjectService getInstance() {
8+
return INSTANCE;
9+
}
10+
11+
public void createProject(PluginProjectInfo pluginProjectInfo) {
12+
13+
}
14+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.xwintop.xJavaFxTool.newui.creator;
2+
3+
import javafx.scene.image.Image;
4+
import lombok.Data;
5+
6+
@Data
7+
public class PluginProjectInfo {
8+
9+
private String location;
10+
11+
private String groupId;
12+
13+
private String artifactId;
14+
15+
private String version;
16+
17+
private String pluginName;
18+
19+
private Image pluginLogo;
20+
}

src/main/resources/com/xwintop/xJavaFxTool/fxmlView/newui/plugin-creator.fxml

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,53 @@
11
<?import javafx.geometry.Insets?>
2-
<?import javafx.scene.control.Hyperlink?>
3-
<?import javafx.scene.control.Label?>
4-
<?import javafx.scene.layout.StackPane?>
5-
<?import javafx.scene.layout.VBox?>
2+
<?import javafx.scene.control.*?>
3+
<?import javafx.scene.image.ImageView?>
4+
<?import javafx.scene.layout.*?>
5+
<?import java.lang.Integer?>
66
<VBox spacing="5" prefWidth="500" prefHeight="300"
7-
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/10.0.2-internal"
8-
fx:controller="com.xwintop.xJavaFxTool.newui.PluginCreatorController">
7+
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/10.0.2-internal"
8+
fx:controller="com.xwintop.xJavaFxTool.newui.PluginCreatorController">
99
<StackPane fx:id="stackPane" VBox.vgrow="ALWAYS">
1010

11-
<VBox visible="true" spacing="15">
11+
<fx:define>
12+
<Integer fx:value="80" fx:id="labelWidth"/>
13+
</fx:define>
14+
15+
<VBox spacing="15">
1216
<padding>
1317
<Insets topRightBottomLeft="35"/>
1418
</padding>
1519
<Label fx:id="txtWelcome"/>
16-
<Hyperlink text="下一步"/>
20+
<Hyperlink text="下一步" onAction="#showCreatorForm"/>
1721
</VBox>
1822

19-
<VBox alignment="CENTER" visible="false">
23+
<VBox alignment="CENTER" visible="false" spacing="10" style="-fx-padding: 10">
24+
<HBox alignment="BASELINE_LEFT" spacing="5">
25+
<Label text="项目位置: " prefWidth="$labelWidth"/>
26+
<TextField HBox.hgrow="ALWAYS" fx:id="txtLocation"/>
27+
<Button text="..."/>
28+
</HBox>
29+
<HBox alignment="BASELINE_LEFT" spacing="5">
30+
<Label text="groupId: " prefWidth="$labelWidth"/>
31+
<TextField HBox.hgrow="ALWAYS" fx:id="txtGroupId"/>
32+
</HBox>
33+
<HBox alignment="BASELINE_LEFT" spacing="5">
34+
<Label text="artifactId: " prefWidth="$labelWidth"/>
35+
<TextField HBox.hgrow="ALWAYS" fx:id="txtArtifactId"/>
36+
</HBox>
37+
<HBox alignment="BASELINE_LEFT" spacing="5">
38+
<Label text="version: " prefWidth="$labelWidth"/>
39+
<TextField HBox.hgrow="ALWAYS" text="1.0.0-SNAPSHOT" fx:id="txtVersion"/>
40+
</HBox>
41+
<HBox alignment="BASELINE_LEFT" spacing="5">
42+
<Label text="插件名称: " prefWidth="$labelWidth"/>
43+
<TextField HBox.hgrow="ALWAYS" fx:id="txtPluginName"/>
44+
</HBox>
45+
<HBox spacing="5" style="-fx-padding: 5 0 0 0">
46+
<Label text="插件图标: " prefWidth="$labelWidth"/>
47+
<ImageView style="-fx-background-color: #AAAAAA"
48+
fitWidth="64" fitHeight="64" fx:id="imgPluginLogo"/>
49+
<Button text="..." onAction="#choosePluginLogo"/>
50+
</HBox>
2051
</VBox>
2152

2253
</StackPane>

0 commit comments

Comments
 (0)