diff --git a/pom.xml b/pom.xml index c96c1f9..e1dcbd9 100644 --- a/pom.xml +++ b/pom.xml @@ -406,7 +406,11 @@ bcprov-jdk16 1.46 - + + org.fxmisc.richtext + richtextfx + 0.10.0 + diff --git a/src/main/java/com/zhangmeng/tools/components/RecursiveFileList.java b/src/main/java/com/zhangmeng/tools/components/RecursiveFileList.java new file mode 100644 index 0000000..5b6f4c2 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/components/RecursiveFileList.java @@ -0,0 +1,159 @@ +package com.zhangmeng.tools.components; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-05-08 11:41 + */ + +import com.zaxxer.hikari.util.FastList; +import javafx.application.Platform; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.control.Label; +import javafx.scene.control.TreeCell; +import javafx.scene.control.TreeItem; +import javafx.scene.control.TreeView; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.text.Font; +import javafx.scene.text.Text; +import javafx.util.Callback; +import org.apache.commons.io.FilenameUtils; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.*; + +public class RecursiveFileList extends TreeView { + + private final SimpleObjectProperty index_file = new SimpleObjectProperty<>(null); + + private final SimpleIntegerProperty text_size = new SimpleIntegerProperty(15); + private final SimpleIntegerProperty icon_size = new SimpleIntegerProperty(15); + + public RecursiveFileList(File root) { + super(new TreeItem<>(root)); + if (root != null){ + new Thread(()->{ + Platform.runLater(()->{ + setRoot(getTreeItem(root)); + }); + }).start(); + }else { + setRoot(null); + } + setShowRoot(true); + this.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue.getValue().isFile()) { + index_file.setValue(newValue.getValue()); + } + }); + this.setCellFactory(new Callback, TreeCell>() { + @Override + public TreeCell call(TreeView param) { + return new TreeCell(){ + @Override + protected void updateItem(File item, boolean empty) { + super.updateItem(item, empty); + if (!empty){ + HBox hBox = new HBox(10); + ImageView iv = null; + if (this.getTreeItem().isExpanded()){ + iv = new ImageView(new Image("image/向下.png")); + }else { + iv = new ImageView(new Image("image/向右.png")); + } + iv.setPreserveRatio(true); + iv.setFitWidth(icon_size.get()); + this.setDisclosureNode(iv); + + Label label = new Label(item.getName()); + label.setFont(new Font(text_size.get())); + + //判断是否是文件 + boolean directory = item.isDirectory(); + if (directory){ + ImageView dir = new ImageView(new Image("image/dir.png")); + dir.setPreserveRatio(true); + dir.setFitWidth(icon_size.get()); + hBox.getChildren().add(dir); + }else { + if (item.isFile()){ + ImageView file = null; + + String extension = FilenameUtils.getExtension(item.getName()); + if (extension.equals("java")){ + file = new ImageView(new Image("image/java.png")); + } + if (extension.equals("html")){ + file = new ImageView(new Image("image/html.png")); + } + if (extension.equals("jar")){ + file = new ImageView(new Image("image/jar.png")); + } + if (extension.equals("json")){ + file = new ImageView(new Image("image/json.png")); + } + + if (extension.equals("jpg")){ + file = new ImageView(new Image("image/jpg.png")); + } + + if (extension.equals("png")){ + file = new ImageView(new Image("image/png.png")); + } + + if (file != null){ + file.setPreserveRatio(true); + file.setFitWidth(icon_size.get()); + hBox.getChildren().add(file); + } + } + } + + hBox.getChildren().add(label); + this.setGraphic(hBox); + }else { + this.setGraphic(null); + this.setDisclosureNode(null); + } + } + }; + } + }); + } + + private TreeItem getTreeItem(File file) { + TreeItem item = new TreeItem<>(); + item.setGraphic(new Text(file.getName())); + item.setValue(file); + if (file.isDirectory()) { + if (file.listFiles()!= null){ + List fileList = new ArrayList<>(); + File[] dirs = file.listFiles(File::isDirectory); + if (dirs != null){ + Arrays.sort(dirs, Comparator.comparing(File::getName)); + fileList.addAll(List.of(dirs)); + } + File[] files = file.listFiles(File::isFile); + if (files != null){ + Arrays.sort(files, Comparator.comparing(File::getName)); + fileList.addAll(List.of(files)); + } + for (File child : fileList) { + item.getChildren().add(getTreeItem(child)); + } + } + } + return item; + } + + public File getValue() { + if (index_file.getValue() == null) { + return null; + } + return index_file.getValue(); + } +} diff --git a/src/main/java/com/zhangmeng/tools/controller/FileEditController.java b/src/main/java/com/zhangmeng/tools/controller/FileEditController.java new file mode 100644 index 0000000..3741a26 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/FileEditController.java @@ -0,0 +1,179 @@ +package com.zhangmeng.tools.controller; + +import com.zhangmeng.tools.components.RecursiveFileList; +import com.zhangmeng.tools.languages.ProcessJava; +import com.zhangmeng.tools.utils.AlertUtils; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.SplitPane; +import javafx.scene.image.Image; +import javafx.stage.DirectoryChooser; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.fxmisc.flowless.VirtualizedScrollPane; +import org.fxmisc.richtext.CodeArea; +import org.fxmisc.richtext.LineNumberFactory; +import org.fxmisc.richtext.model.StyleSpans; +import org.fxmisc.richtext.model.StyleSpansBuilder; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.Collection; +import java.util.Collections; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-06-01 10:44 + * + * 文本编辑器 + */ +@Slf4j +public class FileEditController { + + + public SplitPane splitPane; + + private CodeArea codeArea; + private RecursiveFileList recursiveFileList = null; + + @FXML + public void initialize() { + recursiveFileList = new RecursiveFileList(null); + codeArea = new CodeArea(); + URL resource = this.getClass().getClassLoader().getResource("css/code.css"); + codeArea.setParagraphGraphicFactory(LineNumberFactory.get(codeArea)); + codeArea.textProperty().addListener((obs, oldText, newText) -> { + codeArea.setStyleSpans(0, computeHighlighting(newText)); + }); + codeArea.getStylesheets().add(resource.toExternalForm()); + splitPane.getItems().add(0,recursiveFileList); + splitPane.getItems().add(1,new VirtualizedScrollPane<>(codeArea)); + splitPane.setDividerPosition(0,0.20); + splitPane.setDividerPosition(1,0.80); + } + + @FXML + public void open_file_dir(ActionEvent event) { + open_file_dir(); + } + + public void open_file(File file){ + byte[] bytes = new byte[0]; + try { + bytes = Files.readAllBytes(file.toPath()); + } catch (IOException e) { + e.printStackTrace(); + } + String file_content = new String(bytes, StandardCharsets.UTF_8); + codeArea.clear(); + codeArea.replaceText(0, 0, file_content); + } + + public void open_file_dir(){ + + Stage stage = new Stage(); + DirectoryChooser dc = new DirectoryChooser(); + dc.setTitle("文件夹选择"); + File file = dc.showDialog(stage); + if (file != null) { + if (file.isDirectory()){ + splitPane.getItems().clear(); + recursiveFileList = new RecursiveFileList(file) ; + recursiveFileList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue.getValue().isFile()) { + String extension = FilenameUtils.getExtension(newValue.getValue().getName()); + boolean flag = true; + + if (extension.equals("mp4")){ + flag = false; + } + + if (extension.equals("jpg")){ + flag = false; + } + + if (extension.equals("png")){ + flag = false; + } + + if (extension.equals("avi")){ + flag = false; + } + + if (extension.equals("zip")){ + flag = false; + } + + if (extension.equals("ico")){ + flag = false; + } +// +// if (extension.equals("json")){ +// flag = true; +// } +// +// if (extension.equals("go")){ +// flag = true; +// } +// +// if (extension.equals("js")){ +// flag = true; +// } +// +// if (extension.equals("css")){ +// flag = true; +// } +// +// if (extension.equals(".xml")){ +// flag = true; +// } + if (flag){ + open_file(newValue.getValue()); + }else { + AlertUtils.alert_warning("该文件不支持!"); + } + } + }); + + splitPane.getItems().add(0,recursiveFileList); + splitPane.getItems().add(1,new VirtualizedScrollPane<>(codeArea)); + splitPane.setDividerPosition(0,0.20); + splitPane.setDividerPosition(1,0.80); + } + } + } + + public static StyleSpans> computeHighlighting(String text) { + Matcher matcher = ProcessJava.PATTERN.matcher(text); + int lastKwEnd = 0; + StyleSpansBuilder> spansBuilder = new StyleSpansBuilder<>(); + while(matcher.find()) { + String styleClass = + matcher.group("KEYWORD") != null ? "keyword" : + matcher.group("PAREN") != null ? "paren" : + matcher.group("BRACE") != null ? "brace" : + matcher.group("BRACKET") != null ? "bracket" : + matcher.group("SEMICOLON") != null ? "semicolon" : + matcher.group("STRING") != null ? "string" : + matcher.group("COMMENT") != null ? "comment" : + matcher.group("ANNOTATION") != null ? "annotation" : + matcher.group("PARAMS") != null ? "parameter" : + null; /* never happens */ + assert styleClass != null; + spansBuilder.add(Collections.emptyList(), matcher.start() - lastKwEnd); + spansBuilder.add(Collections.singleton(styleClass), matcher.end() - matcher.start()); + lastKwEnd = matcher.end(); + } + spansBuilder.add(Collections.emptyList(), text.length() - lastKwEnd); + return spansBuilder.create(); + } + +} diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index 8ed041a..33230ab 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -595,4 +595,7 @@ public class HomeController implements Serializable { listView.getSelectionModel().select(index); } + public void file_edit_menu_item(ActionEvent event) { + load_small_tools(16); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java index 6387832..2f58af4 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java @@ -83,6 +83,7 @@ public class SmallToolsController { private AnchorPane pdf_ocr; private AnchorPane batch_update_file_name; private AnchorPane capter_screen; + private AnchorPane file_edit; @FXML private ListView listView; @@ -118,9 +119,9 @@ public class SmallToolsController { } @FXML - public void cron_menu_item(){ + public void cron_menu_item() { boolean flag = false; - if (cron != null){ + if (cron != null) { flag = true; } @@ -128,10 +129,10 @@ public class SmallToolsController { } @FXML - public void unicode_menu_item(){ + public void unicode_menu_item() { boolean flag = false; - if (unicode != null){ + if (unicode != null) { flag = true; } @@ -139,9 +140,9 @@ public class SmallToolsController { } @FXML - public void jwt_menu_item(){ + public void jwt_menu_item() { boolean flag = false; - if (jwt_web != null){ + if (jwt_web != null) { flag = true; } @@ -149,69 +150,69 @@ public class SmallToolsController { } @FXML - public void hex_16_menu_item(){ + public void hex_16_menu_item() { boolean flag = false; - if (hex_16 != null){ + if (hex_16 != null) { flag = true; } hex_16(flag); } @FXML - public void color_choose_menu_item(){ + public void color_choose_menu_item() { boolean flag = false; - if (color_choose != null){ + if (color_choose != null) { flag = true; } color_choose(flag); } @FXML - public void qr_code_menu_item(){ + public void qr_code_menu_item() { boolean flag = false; - if (qr_code != null){ + if (qr_code != null) { flag = true; } qr_code(flag); } @FXML - public void date_query_menu_item(){ + public void date_query_menu_item() { boolean flag = false; - if (date_query != null){ + if (date_query != null) { flag = true; } date_query(flag); } @FXML - public void base_62_menu_item(){ + public void base_62_menu_item() { load_codec_tools(0); } @FXML - public void base_64_menu_item(){ + public void base_64_menu_item() { load_codec_tools(1); } @FXML - public void base_32_menu_item(){ + public void base_32_menu_item() { load_codec_tools(2); } @FXML - public void sql_code_gen_menu_item(){ + public void sql_code_gen_menu_item() { load_mysql_tools(0); } @FXML - public void netty_client_menu_item(){ + public void netty_client_menu_item() { load_network_tools(0); } - public void load_network_tools(int index){ + public void load_network_tools(int index) { AnchorPane fx = null; try { fx = FXMLLoader.load(ResourcesUtils.getResource("network-tools")); @@ -228,7 +229,7 @@ public class SmallToolsController { } @FXML - public void morse_coder_menu_item(){ + public void morse_coder_menu_item() { load_codec_tools(3); } @@ -409,11 +410,33 @@ public class SmallToolsController { } capter_screen(flag); } + + if (newValue.getIndex() == 16) { + if (file_edit != null) { + flag = true; + } + file_edit(flag); + } } }); } + private void file_edit(boolean flag) { + //默认选择第一个 + listView.getSelectionModel().select(0); + if (!flag) { + try { + root = FXMLLoader.load(ResourcesUtils.getResource("file-edit")); + } catch (IOException e) { + e.printStackTrace(); + } + file_edit = root; + } else { + root = file_edit; + } + common_method(); + } public static Image getImage(ResourcesUtils.SmallTools SmallTools) { @@ -429,11 +452,12 @@ public class SmallToolsController { case TelePhone -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); case JSONView -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); case Maven_Install_Jar -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); - case Word_ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); - case Bar_Code -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); - case Pdf_Ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); - case BatchUpdateFileName -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); - case Capter_Screent -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case Word_ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case Bar_Code -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case Pdf_Ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case BatchUpdateFileName -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case Capter_Screent -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case File_Edit -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); }; } @@ -496,7 +520,6 @@ public class SmallToolsController { } - private void hex_16(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(0); @@ -531,7 +554,7 @@ public class SmallToolsController { common_method(); } - public void jwt_web(boolean flag){ + public void jwt_web(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(2); @@ -548,7 +571,7 @@ public class SmallToolsController { common_method(); } - public void color_choose(boolean flag){ + public void color_choose(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(3); @@ -565,7 +588,7 @@ public class SmallToolsController { common_method(); } - public void qr_code(boolean flag){ + public void qr_code(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(4); @@ -582,7 +605,7 @@ public class SmallToolsController { common_method(); } - public void date_query(boolean flag){ + public void date_query(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(4); @@ -599,7 +622,7 @@ public class SmallToolsController { common_method(); } - public void cron(boolean flag){ + public void cron(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(6); @@ -616,7 +639,7 @@ public class SmallToolsController { common_method(); } - public void telephone(boolean flag){ + public void telephone(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(8); @@ -705,9 +728,9 @@ public class SmallToolsController { } @FXML - public void batch_update_file_name_menu_item(){ + public void batch_update_file_name_menu_item() { boolean flag = false; - if (batch_update_file_name != null){ + if (batch_update_file_name != null) { flag = true; } @@ -750,7 +773,7 @@ public class SmallToolsController { common_method(); } - public void capter_screen(boolean flag){ + public void capter_screen(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(15); @@ -799,13 +822,13 @@ public class SmallToolsController { @FXML public void mail_menu_item(ActionEvent event) { boolean flag = false; - if (mail != null){ + if (mail != null) { flag = true; } mail(flag); } - private void mail(boolean flag ){ + private void mail(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(7); @@ -837,7 +860,7 @@ public class SmallToolsController { load_http_tools(2); } - public void load_http_tools(int index){ + public void load_http_tools(int index) { AnchorPane fx = null; try { fx = FXMLLoader.load(ResourcesUtils.getResource("http-tools")); @@ -868,7 +891,7 @@ public class SmallToolsController { load_server_tools(2); } - public void load_server_tools(int index){ + public void load_server_tools(int index) { AnchorPane fx = null; try { fx = FXMLLoader.load(ResourcesUtils.getResource("server-tools")); @@ -883,35 +906,40 @@ public class SmallToolsController { ListView listView = (ListView) fx.lookup("#listView"); listView.getSelectionModel().select(index); } + @FXML public void socket_server_menu_item(ActionEvent event) { load_server_tools(3); } + @FXML public void telephone_menu_item(ActionEvent event) { boolean flag = false; - if (telephone != null){ + if (telephone != null) { flag = true; } telephone(flag); } + @FXML public void mybatis_plus_gen_menu_item(ActionEvent event) { load_mysql_tools(1); } + @FXML public void JsonView_menu_item(ActionEvent event) { - boolean flag =false; - if (json_view != null){ + boolean flag = false; + if (json_view != null) { flag = true; } json_view(flag); } + @FXML public void maven_jar_install_menu_item(ActionEvent event) { - boolean flag =false; - if (maven_install_jar != null){ + boolean flag = false; + if (maven_install_jar != null) { flag = true; } maven_install_jar(flag); @@ -919,16 +947,17 @@ public class SmallToolsController { @FXML public void word_ocr_menu_item(ActionEvent event) { - boolean flag =false; - if (word_ocr != null){ + boolean flag = false; + if (word_ocr != null) { flag = true; } word_ocr(flag); } + @FXML public void bar_code_menu_item(ActionEvent event) { - boolean flag =false; - if (bar_code != null){ + boolean flag = false; + if (bar_code != null) { flag = true; } bar_code(flag); @@ -936,8 +965,8 @@ public class SmallToolsController { @FXML public void pdf_menu_item(ActionEvent event) { - boolean flag =false; - if (pdf_ocr != null){ + boolean flag = false; + if (pdf_ocr != null) { flag = true; } pdf_ocr(flag); @@ -945,7 +974,7 @@ public class SmallToolsController { public void capter_screen_menu_item(ActionEvent event) { boolean flag = false; - if (capter_screen != null){ + if (capter_screen != null) { flag = true; } capter_screen(flag); diff --git a/src/main/java/com/zhangmeng/tools/languages/ProcessJava.java b/src/main/java/com/zhangmeng/tools/languages/ProcessJava.java new file mode 100644 index 0000000..2b31356 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/languages/ProcessJava.java @@ -0,0 +1,127 @@ +package com.zhangmeng.tools.languages; + +import java.util.regex.Pattern; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-06-01 11:01 + */ +public class ProcessJava { + + public static final String[] KEYWORDS = new String[] { + "abstract", "assert", "boolean", "break", "byte", + "case", "catch", "char", "class", "const", + "continue", "default", "do", "double", "else", + "enum", "extends", "final", "finally", "float", + "for", "if", "goto", "implements", "import", + "instanceof", "int", "interface", "long", "native", + "new", "package", "private", "protected", "public", + "return", "short", "static", "strictfp", "super", + "switch", "synchronized", "this", "throw", "throws", + "transient", "try", "void", "volatile", "while" + }; + + public static final String KEYWORD_PATTERN = "\\b(" + String.join("|", KEYWORDS) + ")\\b"; + public static final String PAREN_PATTERN = "\\(|\\)"; + public static final String BRACE_PATTERN = "\\{|\\}"; + public static final String BRACKET_PATTERN = "\\[|\\]"; + public static final String SEMICOLON_PATTERN = "\\;"; + public static final String STRING_PATTERN = "\"([^\"\\\\]|\\\\.)*\""; + public static final String COMMENT_PATTERN = "//[^\n]*" + "|" + "/\\*(.|\\R)*?\\*/"; + public static final String ANNOTATION_PATTERN = "@[a-zA-Z]+"; + public static final String PARAMS_PATTERN = "\\\\b([a-zA-Z]+)\\\\s*=\\\\s*([a-zA-Z0-9]+)\\\\b"; + + public static final Pattern PATTERN = Pattern.compile( + "(?" + KEYWORD_PATTERN + ")" + + "|(?" + PAREN_PATTERN + ")" + + "|(?" + BRACE_PATTERN + ")" + + "|(?" + BRACKET_PATTERN + ")" + + "|(?" + SEMICOLON_PATTERN + ")" + + "|(?" + STRING_PATTERN + ")" + + "|(?" + COMMENT_PATTERN + ")" + + "|(?" + ANNOTATION_PATTERN + ")" + + "|(?" + PARAMS_PATTERN + ")" + + ); + + public static String SAMPLE_CODE = "package com.dashidao.server.model;\n" + + "\n" + + "import java.util.Date;\n" + + "\n" + + "public class PosterGroupCouponCode extends BaseEntity {\n" + + "\n" + + "\tprivate Date addTime;\n" + + "\tprivate Boolean deleteStatus;\n" + + "\tprivate String groupCouponCode;\n" + + "\tprivate Integer groupCouponStatus;\n" + + "\tprivate Date writeOffTime;\n" + + "\tprivate Long orderFormId;\n" + + "\tprivate Long posterGoodsCartId;\n" + + "\tprivate Long tuiKuanShouHouId;\n" + + "\tprivate Long orderMealUserId;\n" + + "\tprivate String groupSkusJson;\n" + + "\n" + + "\tpublic Date getAddTime() {\n" + + "\t\treturn addTime;\n" + + "\t}\n" + + "\tpublic void setAddTime(Date addTime) {\n" + + "\t\tthis.addTime = addTime;\n" + + "\t}\n" + + "\tpublic Boolean getDeleteStatus() {\n" + + "\t\treturn deleteStatus;\n" + + "\t}\n" + + "\tpublic void setDeleteStatus(Boolean deleteStatus) {\n" + + "\t\tthis.deleteStatus = deleteStatus;\n" + + "\t}\n" + + "\tpublic String getGroupCouponCode() {\n" + + "\t\treturn groupCouponCode;\n" + + "\t}\n" + + "\tpublic void setGroupCouponCode(String groupCouponCode) {\n" + + "\t\tthis.groupCouponCode = groupCouponCode;\n" + + "\t}\n" + + "\tpublic Integer getGroupCouponStatus() {\n" + + "\t\treturn groupCouponStatus;\n" + + "\t}\n" + + "\tpublic void setGroupCouponStatus(Integer groupCouponStatus) {\n" + + "\t\tthis.groupCouponStatus = groupCouponStatus;\n" + + "\t}\n" + + "\tpublic Date getWriteOffTime() {\n" + + "\t\treturn writeOffTime;\n" + + "\t}\n" + + "\tpublic void setWriteOffTime(Date writeOffTime) {\n" + + "\t\tthis.writeOffTime = writeOffTime;\n" + + "\t}\n" + + "\tpublic Long getOrderFormId() {\n" + + "\t\treturn orderFormId;\n" + + "\t}\n" + + "\tpublic void setOrderFormId(Long orderFormId) {\n" + + "\t\tthis.orderFormId = orderFormId;\n" + + "\t}\n" + + "\tpublic Long getPosterGoodsCartId() {\n" + + "\t\treturn posterGoodsCartId;\n" + + "\t}\n" + + "\tpublic void setPosterGoodsCartId(Long posterGoodsCartId) {\n" + + "\t\tthis.posterGoodsCartId = posterGoodsCartId;\n" + + "\t}\n" + + "\tpublic Long getTuiKuanShouHouId() {\n" + + "\t\treturn tuiKuanShouHouId;\n" + + "\t}\n" + + "\tpublic void setTuiKuanShouHouId(Long tuiKuanShouHouId) {\n" + + "\t\tthis.tuiKuanShouHouId = tuiKuanShouHouId;\n" + + "\t}\n" + + "\tpublic Long getOrderMealUserId() {\n" + + "\t\treturn orderMealUserId;\n" + + "\t}\n" + + "\tpublic void setOrderMealUserId(Long orderMealUserId) {\n" + + "\t\tthis.orderMealUserId = orderMealUserId;\n" + + "\t}\n" + + "\tpublic String getGroupSkusJson() {\n" + + "\t\treturn groupSkusJson;\n" + + "\t}\n" + + "\tpublic void setGroupSkusJson(String groupSkusJson) {\n" + + "\t\tthis.groupSkusJson = groupSkusJson;\n" + + "\t}\n" + + "\n" + + "}\n"; +} diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index 4c856c0..70d38dd 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -132,6 +132,7 @@ public class ResourcesUtils { Pdf_Ocr("pdf识别", 13), BatchUpdateFileName("批量修改文件名", 14), Capter_Screent("截图", 15), + File_Edit("文件编辑器", 16), ; SmallTools(String title, int index) { diff --git a/src/main/resources/css/code.css b/src/main/resources/css/code.css new file mode 100644 index 0000000..9379b12 --- /dev/null +++ b/src/main/resources/css/code.css @@ -0,0 +1,187 @@ +/*- CodeArea的根节点样式*/ +.code-area { + -fx-font-family: "Consolas"; + -fx-font-size: 16px; + -fx-text-fill: #1d171e; + -fx-background-color: #ffffff; +} + +/** - 行号的样式*/ +.code-area .line-number { + -fx-background-color: #f4f4f4; + -fx-text-fill: #999999; + -fx-fill: #f4f; + -fx-font-size: 18px; + -fx-padding: 5 5 5 5px +} + +/*- 光标的样式*/ +.code-area .caret { + +} + +.code-area .selection { + -fx-fill: #cbcacb; +} + +/*-*/ +/*选中文本的样式*/ +.code-area .highlight { + +} + +/*-*/ +/*高亮文本的样式*/ +.code-area .folded { + +} + +/*-*/ +/*折叠代码的样式*/ +.code-area .folded-indicator { + +} + +/*-*/ +/*折叠代码指示器的样式*/ +.code-area .folded-indicator:hover { + +} + +/*-*/ +/*折叠代码指示器的鼠标悬停样式*/ +.code-area .error { + +} + +/*-*/ +/*错误文本的样式*/ +.code-area .warning { + +} + +/*-*/ +/*警告文本的样式*/ +.code-area .info { + +} + +/*-*/ +/*信息文本的样式*/ +.code-area .keyword { + -fx-fill: #10ADEBFF +} + +/*-*/ +/*关键字的样式*/ +.code-area .operator { + -fx-fill: #d12746; +} + +/*-*/ +/*运算符的样式*/ +.code-area .number { + -fx-fill: #27c5d1; +} + +/*-*/ +/*数字的样式*/ +.code-area .string { + +} + +/*-*/ +/*字符串的样式*/ +.code-area .comment { + -fx-fill: #cbcacb; +} + +/*-*/ +/*注释的样式*/ +.code-area .type { + -fx-fill: red; + -fx-text-fill: #ffff55; +} + +/*-*/ +/*类型的样式*/ +.code-area .function { + -fx-fill: red; + -fx-text-fill: #ffff55; +} + +/*-*/ +/*函数的样式*/ +.code-area .parameter { + -fx-fill: #d56b6b; +} + +/*-*/ +/*参数的样式*/ +.code-area .annotation { + -fx-fill: #eeee07; +} + +/*-*/ +/*注解的样式*/ +.code-area .class { + -fx-fill: red; + -fx-text-fill: red; +} + +/*-*/ +/*类的样式*/ +.code-area .interface { + -fx-fill: red; + -fx-text-fill: red; +} + +/*-*/ +/*接口的样式*/ +.code-area .enum { + +} + +/*-*/ +/*枚举的样式*/ +.code-area .field { + +} + +/*-*/ +/*字段的样式*/ +.code-area .method { + -fx-fill: red; + -fx-text-fill: red; +} + +/*-*/ +/*方法的样式*/ +.code-area .constructor { + +} + +/*-*/ +/*构造函数的样式*/ +.code-area .static { + +} + +/*-*/ +/*静态的样式*/ +.code-area .final { + +} + +/*-*/ +/*最终的样式*/ +.code-area .abstract { + -fx-fill: red; + +} + +/*-*/ +/*抽象的样式*/ +.code-area .deprecated { + -fx-fill: #d12746; +} diff --git a/src/main/resources/fxml/file-edit.fxml b/src/main/resources/fxml/file-edit.fxml new file mode 100644 index 0000000..2367e7a --- /dev/null +++ b/src/main/resources/fxml/file-edit.fxml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index 61dfe56..2afb18e 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -49,6 +49,7 @@ + diff --git a/src/main/resources/image/dir.png b/src/main/resources/image/dir.png new file mode 100644 index 0000000..15c29b7 Binary files /dev/null and b/src/main/resources/image/dir.png differ diff --git a/src/main/resources/image/html.png b/src/main/resources/image/html.png new file mode 100644 index 0000000..56d9f1e Binary files /dev/null and b/src/main/resources/image/html.png differ diff --git a/src/main/resources/image/jar.png b/src/main/resources/image/jar.png new file mode 100644 index 0000000..1d7cfed Binary files /dev/null and b/src/main/resources/image/jar.png differ diff --git a/src/main/resources/image/java.png b/src/main/resources/image/java.png new file mode 100644 index 0000000..4dc7435 Binary files /dev/null and b/src/main/resources/image/java.png differ diff --git a/src/main/resources/image/jpg.png b/src/main/resources/image/jpg.png new file mode 100644 index 0000000..960aefd Binary files /dev/null and b/src/main/resources/image/jpg.png differ diff --git a/src/main/resources/image/json.png b/src/main/resources/image/json.png new file mode 100644 index 0000000..6903b6c Binary files /dev/null and b/src/main/resources/image/json.png differ diff --git a/src/main/resources/image/png.png b/src/main/resources/image/png.png new file mode 100644 index 0000000..75daa7c Binary files /dev/null and b/src/main/resources/image/png.png differ diff --git a/src/main/resources/image/向下.png b/src/main/resources/image/向下.png new file mode 100644 index 0000000..bce1d60 Binary files /dev/null and b/src/main/resources/image/向下.png differ diff --git a/src/main/resources/image/向右.png b/src/main/resources/image/向右.png new file mode 100644 index 0000000..5d3f6e6 Binary files /dev/null and b/src/main/resources/image/向右.png differ