2023年6月1日16:35:26 添加文本编辑器

master
zhangmeng 2023-06-01 16:35:57 +08:00
parent 826a5b2245
commit 6152cf10e3
19 changed files with 770 additions and 53 deletions

View File

@ -406,7 +406,11 @@
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>
<dependency>
<groupId>org.fxmisc.richtext</groupId>
<artifactId>richtextfx</artifactId>
<version>0.10.0</version>
</dependency>
</dependencies>
<build>

View File

@ -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<File> {
private final SimpleObjectProperty<File> 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<TreeView<File>, TreeCell<File>>() {
@Override
public TreeCell<File> call(TreeView<File> param) {
return new TreeCell<File>(){
@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<File> getTreeItem(File file) {
TreeItem<File> item = new TreeItem<>();
item.setGraphic(new Text(file.getName()));
item.setValue(file);
if (file.isDirectory()) {
if (file.listFiles()!= null){
List<File> 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();
}
}

View File

@ -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<Collection<String>> computeHighlighting(String text) {
Matcher matcher = ProcessJava.PATTERN.matcher(text);
int lastKwEnd = 0;
StyleSpansBuilder<Collection<String>> 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();
}
}

View File

@ -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);
}
}

View File

@ -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<ResourcesUtils.SmallTools> 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<ResourcesUtils.Player> 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);

View File

@ -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>" + KEYWORD_PATTERN + ")"
+ "|(?<PAREN>" + PAREN_PATTERN + ")"
+ "|(?<BRACE>" + BRACE_PATTERN + ")"
+ "|(?<BRACKET>" + BRACKET_PATTERN + ")"
+ "|(?<SEMICOLON>" + SEMICOLON_PATTERN + ")"
+ "|(?<STRING>" + STRING_PATTERN + ")"
+ "|(?<COMMENT>" + COMMENT_PATTERN + ")"
+ "|(?<ANNOTATION>" + ANNOTATION_PATTERN + ")"
+ "|(?<PARAMS>" + 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<Long> {\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";
}

View File

@ -132,6 +132,7 @@ public class ResourcesUtils {
Pdf_Ocr("pdf识别", 13),
BatchUpdateFileName("批量修改文件名", 14),
Capter_Screent("截图", 15),
File_Edit("文件编辑器", 16),
;
SmallTools(String title, int index) {

View File

@ -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;
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane fx:controller="com.zhangmeng.tools.controller.FileEditController" prefHeight="649.0" prefWidth="1200.0"
xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1">
<children>
<MenuBar AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<menus>
<Menu mnemonicParsing="false" text="文件">
<items>
<MenuItem mnemonicParsing="false" text="打开文件夹" onAction="#open_file_dir" />
<MenuItem mnemonicParsing="false" text="保存"/>
</items>
</Menu>
</menus>
</MenuBar>
<SplitPane fx:id="splitPane" layoutX="122.0" layoutY="239.0" prefHeight="200.0" prefWidth="808.0" AnchorPane.bottomAnchor="0.0"
AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="25.0">
</SplitPane>
</children>
</AnchorPane>

View File

@ -49,6 +49,7 @@
<MenuItem mnemonicParsing="false" text="pdf识别" onAction="#pdf_menu_item"/>
<MenuItem mnemonicParsing="false" text="批量修改文件名" onAction="#batch_update_file_name_menu_item"/>
<MenuItem mnemonicParsing="false" text="截图工具" onAction="#capter_screen_menu_item"/>
<MenuItem mnemonicParsing="false" text="文件编辑器" onAction="#file_edit_menu_item"/>
</items>
</Menu>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB