2023年10月10日14:51:17
parent
ec9eace48c
commit
e41bf5ffc7
|
|
@ -0,0 +1,23 @@
|
|||
#
|
||||
# TimiFXExamples 配置文件,不建议手动修改,可能会导致程序异常或崩溃
|
||||
#
|
||||
|
||||
[Main]
|
||||
|
||||
# 语言
|
||||
Lang=zh_CN
|
||||
|
||||
# 窗体宽度,静默配置,双精度浮点型,取值范围 [1, 系统最大限制],默认 1300
|
||||
Width=1300
|
||||
|
||||
# 窗体高度,静默配置,双精度浮点型,取值范围 [1, 系统最大限制],默认 850
|
||||
Height=850
|
||||
|
||||
# 编辑器主题
|
||||
AceJsThem=kr_theme
|
||||
|
||||
|
||||
[Interpolator]
|
||||
|
||||
# 动画插值器持续时间
|
||||
Duration=1000
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package com.zhangmeng.tools.controller;
|
||||
|
||||
import com.sun.javafx.PlatformUtil;
|
||||
import com.zhangmeng.tools.components.RecursiveFileList;
|
||||
import com.zhangmeng.tools.dto.FileTreeView;
|
||||
import com.zhangmeng.tools.editors.ace.AceEditor;
|
||||
import com.zhangmeng.tools.editors.ace.AceMode;
|
||||
|
|
@ -12,6 +14,7 @@ import com.zhangmeng.tools.utils.ImagePath;
|
|||
import com.zhangmeng.tools.utils.ResourcesUtils;
|
||||
import eu.mihosoft.monacofx.Editor;
|
||||
import eu.mihosoft.monacofx.MonacoFX;
|
||||
import javafx.application.Platform;
|
||||
import javafx.beans.property.SimpleDoubleProperty;
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
|
|
@ -19,27 +22,29 @@ import javafx.beans.value.ObservableValue;
|
|||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.Event;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.input.KeyCode;
|
||||
import javafx.scene.input.KeyEvent;
|
||||
import javafx.scene.input.MouseButton;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.input.*;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.paint.Paint;
|
||||
import javafx.scene.text.Font;
|
||||
import javafx.scene.web.WebEngine;
|
||||
import javafx.scene.web.WebView;
|
||||
import javafx.stage.DirectoryChooser;
|
||||
import javafx.stage.FileChooser;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.util.Callback;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.imyeyu.timifx.service.RunAsync;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.fxmisc.flowless.VirtualizedScrollPane;
|
||||
import org.fxmisc.richtext.CodeArea;
|
||||
|
|
@ -53,25 +58,29 @@ import java.nio.file.Files;
|
|||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static net.imyeyu.timifx.TimiFX.BORDER_EXLEFT;
|
||||
|
||||
@Slf4j
|
||||
public class EditorListImplController {
|
||||
|
||||
@FXML
|
||||
public MenuItem open_file;
|
||||
|
||||
@FXML
|
||||
public MenuItem open_dir;
|
||||
|
||||
@FXML
|
||||
public MenuItem save;
|
||||
|
||||
public enum Type {
|
||||
|
||||
JAVA,
|
||||
HTML,
|
||||
GO,
|
||||
JS,
|
||||
CSS,
|
||||
SQL,
|
||||
XML,
|
||||
YML,
|
||||
MARKDOWN
|
||||
JAVA, HTML, GO, JS, CSS, SQL, XML, YML, MARKDOWN
|
||||
}
|
||||
|
||||
private TabPane tabPane = null;
|
||||
private SimpleDoubleProperty width = new SimpleDoubleProperty(0.0);
|
||||
private SimpleDoubleProperty height = new SimpleDoubleProperty(0.0);
|
||||
private AnchorPane root;
|
||||
|
|
@ -82,7 +91,7 @@ public class EditorListImplController {
|
|||
private AnchorPane timiFx;
|
||||
|
||||
private SimpleObjectProperty<File> choose_file = new SimpleObjectProperty<>(null);
|
||||
|
||||
private final ObservableList<Path> filePaths_list = FXCollections.observableArrayList();
|
||||
public static final String color_cell = "#f4f4f4";
|
||||
|
||||
@FXML
|
||||
|
|
@ -91,6 +100,8 @@ public class EditorListImplController {
|
|||
@FXML
|
||||
private SplitPane splitPane;
|
||||
|
||||
private static final Map<Path, Tab> map = new HashMap<>();
|
||||
|
||||
@FXML
|
||||
public void date_query_menu_item() {
|
||||
load_small_tools(5);
|
||||
|
|
@ -354,8 +365,61 @@ public class EditorListImplController {
|
|||
return listCell;
|
||||
}
|
||||
});
|
||||
tabPane = new TabPane();
|
||||
//添加菜单
|
||||
addMenu();
|
||||
File file = null;
|
||||
FileTreeView fileTreeView = new FileTreeView(file);
|
||||
fileTreeView.setBorder(BORDER_EXLEFT);
|
||||
fileTreeView.setFixedCellSize(40);
|
||||
splitPane.getItems().clear();
|
||||
splitPane.getItems().add(0, fileTreeView);
|
||||
splitPane.getItems().add(1, tabPane);
|
||||
splitPane.setDividerPosition(0, 0.20);
|
||||
splitPane.setDividerPosition(1, 0.80);
|
||||
}
|
||||
|
||||
acJsEditor(false);
|
||||
public void addMenu() {
|
||||
|
||||
// 设置快捷键
|
||||
save.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCodeCombination.CONTROL_DOWN));
|
||||
save.setOnAction(event -> writer_file());
|
||||
|
||||
open_file.setAccelerator(new KeyCodeCombination(KeyCode.F, KeyCodeCombination.CONTROL_DOWN));
|
||||
open_file.setOnAction(event -> open_file());
|
||||
|
||||
open_dir.setAccelerator(new KeyCodeCombination(KeyCode.D, KeyCodeCombination.CONTROL_DOWN));
|
||||
open_dir.setOnAction(event -> open_file_dir());
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void open_file() {
|
||||
Stage stage = new Stage();
|
||||
FileChooser dc = new FileChooser();
|
||||
dc.setTitle("文件选择");
|
||||
dc.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("文件类型", "*.java", "*.go", "*.txt", "*.json", "*.sql"));
|
||||
File file = dc.showOpenDialog(stage);
|
||||
if (file != null) {
|
||||
refresh(file, 0);
|
||||
}
|
||||
}
|
||||
|
||||
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()) {
|
||||
refresh(file, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void refresh(File file, int type) {
|
||||
file_checked(file, type);
|
||||
}
|
||||
|
||||
private void acJsEditor(boolean flag) {
|
||||
|
|
@ -439,7 +503,7 @@ public class EditorListImplController {
|
|||
AlertUtils.alert_warning("tab " + choose_file.get().getName() + "保存成功!");
|
||||
}
|
||||
|
||||
public void file_checked(File file) {
|
||||
public void file_checked(File file, int open_type) {
|
||||
String extension = FilenameUtils.getExtension(file.getName());
|
||||
boolean flag = true;
|
||||
|
||||
|
|
@ -492,63 +556,139 @@ public class EditorListImplController {
|
|||
if (extension.equals("yml")) {
|
||||
type = Type.YML;
|
||||
}
|
||||
|
||||
if (extension.equals("md")) {
|
||||
type = Type.MARKDOWN;
|
||||
}
|
||||
|
||||
if (type == null) {
|
||||
type = Type.JAVA;
|
||||
}
|
||||
if (type == null) {
|
||||
type = Type.MARKDOWN;
|
||||
}
|
||||
open_file(file, type);
|
||||
|
||||
open_file(file, type, open_type);
|
||||
} else {
|
||||
AlertUtils.alert_warning("该文件不支持!");
|
||||
}
|
||||
}
|
||||
|
||||
public void open_file(File file, Type type) {
|
||||
public void open_file(File file, Type type, int open_type) {
|
||||
|
||||
String file_content = null;
|
||||
try {
|
||||
file_content = Files.readString(choose_file.get().toPath(), StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
try {
|
||||
file_content = Files.readString(choose_file.get().toPath(), Charset.forName("GBK"));
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
//打开文件
|
||||
//打开文件夹
|
||||
choose_file.setValue(file);
|
||||
|
||||
if (open_type == 1) {
|
||||
common_method();
|
||||
}
|
||||
|
||||
int index = listView.getSelectionModel().getSelectedIndex();
|
||||
|
||||
switch (index) {
|
||||
case 0 -> {
|
||||
|
||||
switch (type){
|
||||
case JAVA -> acJsEditor.setAceMode(AceMode.JAVA);
|
||||
case HTML -> acJsEditor.setAceMode(AceMode.HTML);
|
||||
case XML -> acJsEditor.setAceMode(AceMode.XML);
|
||||
case SQL -> acJsEditor.setAceMode(AceMode.SQL);
|
||||
case MARKDOWN -> acJsEditor.setAceMode(AceMode.MARKDOWN);
|
||||
}
|
||||
|
||||
acJsEditor.setAceText(file_content);
|
||||
Path path = file.toPath();
|
||||
if (filePaths_list.contains(path)) {//size -1 ,szie -2
|
||||
//切换到一打开的tab
|
||||
Tab tab = map.get(path);
|
||||
if (!tabPane.getTabs().contains(tab)) {
|
||||
tabPane.getTabs().add(tab);
|
||||
}
|
||||
tabPane.getSelectionModel().select(tab);
|
||||
} else {
|
||||
if (choose_file.get().isFile()) {
|
||||
|
||||
//异步加载
|
||||
RunAsync.runback(() -> {
|
||||
|
||||
String file_content = null;
|
||||
try {
|
||||
file_content = Files.readString(choose_file.get().toPath(), StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
try {
|
||||
file_content = Files.readString(choose_file.get().toPath(), Charset.forName("GBK"));
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
return file_content;
|
||||
}, file_content -> {
|
||||
|
||||
Tab tab = new Tab(file.getName());
|
||||
|
||||
ContextMenu contextMenu = new ContextMenu();
|
||||
MenuItem close = new MenuItem("close");
|
||||
MenuItem close_other_tabs = new MenuItem("close other tabs");
|
||||
MenuItem close_all = new MenuItem("close all");
|
||||
close_all.setOnAction(event -> {
|
||||
tabPane.getTabs().clear();
|
||||
});
|
||||
close_other_tabs.setOnAction(event -> {
|
||||
ObservableList<Tab> tabs = tabPane.getTabs();
|
||||
ObservableList<Tab> list = FXCollections.observableArrayList(tabs);
|
||||
//关闭其他
|
||||
for (Tab tabPaneTab : list) {
|
||||
if (tabPaneTab != tabPane.getSelectionModel().getSelectedItem()) {
|
||||
tabs.remove(tabPaneTab);
|
||||
}
|
||||
}
|
||||
});
|
||||
close.setOnAction(event -> {
|
||||
//关闭当前窗口
|
||||
Tab selectedItem = tabPane.getSelectionModel().getSelectedItem();
|
||||
tabPane.getTabs().remove(selectedItem);
|
||||
});
|
||||
contextMenu.getItems().add(close);
|
||||
contextMenu.getItems().add(close_other_tabs);
|
||||
contextMenu.getItems().add(close_all);
|
||||
|
||||
|
||||
tab.setContextMenu(contextMenu);
|
||||
tab.setOnCloseRequest(new EventHandler<Event>() {
|
||||
@Override
|
||||
public void handle(Event event) {
|
||||
// log.info("tabtab.setOnCloseRequest:--->" + tab.getText());
|
||||
tabPane.getTabs().remove(tab);
|
||||
}
|
||||
});
|
||||
AceMode mode = null;
|
||||
switch (type) {
|
||||
case JAVA -> mode = AceMode.JAVA;
|
||||
case HTML -> mode = AceMode.HTML;
|
||||
case XML -> mode = AceMode.XML;
|
||||
case SQL -> mode = AceMode.SQL;
|
||||
case MARKDOWN -> mode = AceMode.MARKDOWN;
|
||||
}
|
||||
//新建编辑器
|
||||
AceEditor editor = new AceEditor(choose_file.getValue(),mode,null);
|
||||
WebView view = editor.getWebView();
|
||||
AnchorPane.setTopAnchor(view, 0.0);
|
||||
AnchorPane.setBottomAnchor(view, 0.0);
|
||||
AnchorPane.setLeftAnchor(view, 0.0);
|
||||
AnchorPane.setRightAnchor(view, 0.0);
|
||||
|
||||
tab.setContent(editor);
|
||||
tabPane.getTabs().add(tab);
|
||||
tabPane.getSelectionModel().select(tab);
|
||||
|
||||
filePaths_list.add(path);
|
||||
map.put(path, tab);
|
||||
});
|
||||
}
|
||||
case 1 -> monacoEdit.setText(file_content);
|
||||
case 2 -> codemirror.setText(file_content);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* File file = new File("D:\\generate");
|
||||
*/
|
||||
private void common_method() {
|
||||
//splitPane.getItems().remove(1);
|
||||
File file = choose_file.get();
|
||||
|
||||
//添加菜单
|
||||
splitPane.getItems().clear();
|
||||
//添加文件选择
|
||||
File file = new File("D:\\generate");
|
||||
|
||||
//添加文件选择
|
||||
FileTreeView fileTreeView = new FileTreeView(file);
|
||||
fileTreeView.setBorder(BORDER_EXLEFT);
|
||||
fileTreeView.setFixedCellSize(40);
|
||||
//fileTreeView.addItemFilter(file -> file.isDirectory() || file.getName().endsWith(".txt"));
|
||||
splitPane.getItems().add(0, fileTreeView);
|
||||
splitPane.getItems().add(1, root);
|
||||
splitPane.getItems().add(1, tabPane);
|
||||
splitPane.setDividerPosition(0, 0.2);
|
||||
splitPane.setDividerPosition(1, 0.8);
|
||||
|
||||
|
|
@ -571,34 +711,36 @@ public class EditorListImplController {
|
|||
if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) {
|
||||
// 双击左键的操作
|
||||
log.info("open file:" + choose_file.get().getName());
|
||||
file_checked(choose_file.get());
|
||||
if (choose_file.getValue() != null) {
|
||||
file_checked(choose_file.get(), 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
root.widthProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if (newValue != null) {
|
||||
double width = splitPane.getWidth();
|
||||
EditorListImplController.this.width.set(width);
|
||||
log.info("home:--->width:{}", width);
|
||||
}
|
||||
});
|
||||
root.heightProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if (newValue != null) {
|
||||
double height = splitPane.getHeight();
|
||||
EditorListImplController.this.height.set(height);
|
||||
log.info("home:--->height:{}", height);
|
||||
}
|
||||
});
|
||||
|
||||
this.width.addListener((observable, oldValue, newValue) -> {
|
||||
EditorListImplController.this.root.setPrefWidth(newValue.doubleValue() - listView.getWidth());
|
||||
log.info("root:=====================>width:" + (newValue.doubleValue() - listView.getWidth()));
|
||||
});
|
||||
|
||||
this.height.addListener((observable, oldValue, newValue) -> {
|
||||
EditorListImplController.this.root.setPrefHeight(newValue.doubleValue() - listView.getHeight());
|
||||
log.info("root:=====================>:height" + (newValue.doubleValue() - listView.getWidth()));
|
||||
});
|
||||
// root.widthProperty().addListener((observable, oldValue, newValue) -> {
|
||||
// if (newValue != null) {
|
||||
// double width = splitPane.getWidth();
|
||||
// EditorListImplController.this.width.set(width);
|
||||
// log.info("home:--->width:{}", width);
|
||||
// }
|
||||
// });
|
||||
// root.heightProperty().addListener((observable, oldValue, newValue) -> {
|
||||
// if (newValue != null) {
|
||||
// double height = splitPane.getHeight();
|
||||
// EditorListImplController.this.height.set(height);
|
||||
// log.info("home:--->height:{}", height);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// this.width.addListener((observable, oldValue, newValue) -> {
|
||||
// EditorListImplController.this.root.setPrefWidth(newValue.doubleValue() - listView.getWidth());
|
||||
// log.info("root:=====================>width:" + (newValue.doubleValue() - listView.getWidth()));
|
||||
// });
|
||||
//
|
||||
// this.height.addListener((observable, oldValue, newValue) -> {
|
||||
// EditorListImplController.this.root.setPrefHeight(newValue.doubleValue() - listView.getHeight());
|
||||
// log.info("root:=====================>:height" + (newValue.doubleValue() - listView.getWidth()));
|
||||
// });
|
||||
}
|
||||
|
||||
@FXML
|
||||
|
|
|
|||
|
|
@ -105,10 +105,10 @@ public class FileTreeView extends XTreeView<File> implements TimiFX {
|
|||
this.refreshItem((TreeItem)this.getSelectionModel().getSelectedItem());
|
||||
});
|
||||
|
||||
|
||||
List<File> roots = new ArrayList<>();
|
||||
roots.add(root);
|
||||
|
||||
if (root != null){
|
||||
roots.add(root);
|
||||
}
|
||||
|
||||
menuDestroy.disableProperty().bind(Bindings.createBooleanBinding(() -> {
|
||||
ObservableList<TreeItem<File>> items = this.getSelectionModel().getSelectedItems();
|
||||
|
|
|
|||
|
|
@ -80,6 +80,27 @@ public class AceEditor extends AnchorPane {
|
|||
initialize();
|
||||
}
|
||||
|
||||
public AceEditor(File file,AceMode mode,AceTheme theme) {
|
||||
String file_content = null;
|
||||
try {
|
||||
file_content = Files.readString(file.toPath(), StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
try {
|
||||
file_content = Files.readString(file.toPath(), Charset.forName("GBK"));
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
this.file = file;
|
||||
if (theme != null){
|
||||
this.theme.setValue(theme);
|
||||
}
|
||||
|
||||
this.mode = mode;
|
||||
setText(file_content);
|
||||
initialize();
|
||||
}
|
||||
|
||||
public AceEditor(String text) {
|
||||
setText(text);
|
||||
initialize();
|
||||
|
|
|
|||
|
|
@ -7,129 +7,140 @@
|
|||
<?import javafx.scene.control.SplitPane?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
|
||||
<AnchorPane prefHeight="800.0"
|
||||
prefWidth="1661.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1"
|
||||
fx:controller="com.zhangmeng.tools.controller.EditorListImplController">
|
||||
<AnchorPane prefHeight="800.0" prefWidth="1661.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.zhangmeng.tools.controller.EditorListImplController">
|
||||
<children>
|
||||
<MenuBar layoutX="14.0" layoutY="27.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
|
||||
AnchorPane.topAnchor="0.0">
|
||||
<MenuBar layoutX="14.0" layoutY="27.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<menus>
|
||||
<Menu mnemonicParsing="false" text="加密工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" onAction="#md5_menu_item" text="md5 加密"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#spring_security_menu_item" text="spring security 加密"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#jks_file_menu_item" text="jkd 文件生成"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#md5_menu_item" text="md5 加密" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#spring_security_menu_item" text="spring security 加密" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#jks_file_menu_item" text="jkd 文件生成" />
|
||||
|
||||
</items>
|
||||
</items>
|
||||
</Menu>
|
||||
<Menu mnemonicParsing="false" text="影音工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="视频播放" onAction="#video_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="音乐播放" onAction="#music_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="vip 视频解析" onAction="#vip_parser_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="音乐解析" onAction="#music_parser_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="视频转码" onAction="#video_transcoder_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#video_menu_item" text="视频播放" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#music_menu_item" text="音乐播放" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#vip_parser_menu_item" text="vip 视频解析" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#music_parser_menu_item" text="音乐解析" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#video_transcoder_menu_item" text="视频转码" />
|
||||
</items>
|
||||
</Menu>
|
||||
<Menu mnemonicParsing="false" text="常用小工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="16进制(Hex)" onAction="#hex_16_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="Unicode和字符串转换" onAction="#unicode_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="jwt工具" onAction="#jwt_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="颜色选择工具" onAction="#color_choose_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="二维码生成" onAction="#qr_code_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="时间工具" onAction="#date_query_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="cron表达式" onAction="#cron_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="邮件发送" onAction="#mail_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="手机号工具" onAction="#telephone_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="JsonView" onAction="#JsonView_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="maven-jar-install" onAction="#maven_jar_install_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="word-ocr" onAction="#word_ocr_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="条形码识别" onAction="#bar_code_menu_item"/>
|
||||
<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"/>
|
||||
<MenuItem mnemonicParsing="false" text="LayUI表单代码生成" onAction="#layui_form_gen_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="日志输出" onAction="#log_console_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="EditPlus注册码生成" onAction="#edit_plus_code_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="minio文件上传" onAction="#minio_upload_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#hex_16_menu_item" text="16进制(Hex)" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#unicode_menu_item" text="Unicode和字符串转换" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#jwt_menu_item" text="jwt工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#color_choose_menu_item" text="颜色选择工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#qr_code_menu_item" text="二维码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#date_query_menu_item" text="时间工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#cron_menu_item" text="cron表达式" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#mail_menu_item" text="邮件发送" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#telephone_menu_item" text="手机号工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#JsonView_menu_item" text="JsonView" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#maven_jar_install_menu_item" text="maven-jar-install" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#word_ocr_menu_item" text="word-ocr" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#bar_code_menu_item" text="条形码识别" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#pdf_menu_item" text="pdf识别" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#batch_update_file_name_menu_item" text="批量修改文件名" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#capter_screen_menu_item" text="截图工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#file_edit_menu_item" text="文件编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#layui_form_gen_menu_item" text="LayUI表单代码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#log_console_menu_item" text="日志输出" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#edit_plus_code_menu_item" text="EditPlus注册码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#minio_upload_menu_item" text="minio文件上传" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="编解码工具">
|
||||
<Menu mnemonicParsing="false" text="编解码工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="Base62编码解码" onAction="#base_62_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="Base64编码解码" onAction="#base_64_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="Base32编码解码" onAction="#base_32_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="摩尔斯电码" onAction="#morse_coder_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#base_62_menu_item" text="Base62编码解码" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#base_64_menu_item" text="Base64编码解码" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#base_32_menu_item" text="Base32编码解码" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#morse_coder_menu_item" text="摩尔斯电码" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="代码工具">
|
||||
<Menu mnemonicParsing="false" text="代码工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="mysql代码生成" onAction="#sql_code_gen_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="mybatis-plus 代码生成" onAction="#mybatis_plus_gen_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="json转javaBean 代码生成" onAction="#json_javabean_gen_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="sql 查询" onAction="#sql_query_gen_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#sql_code_gen_menu_item" text="mysql代码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#mybatis_plus_gen_menu_item" text="mybatis-plus 代码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#json_javabean_gen_menu_item" text="json转javaBean 代码生成" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#sql_query_gen_menu_item" text="sql 查询" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="http工具">
|
||||
<Menu mnemonicParsing="false" text="http工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="http请求工具" onAction="#http_request_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="http上传工具" onAction="#http_upload_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="http下载工具" onAction="#http_download_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#http_request_menu_item" text="http请求工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#http_upload_menu_item" text="http上传工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#http_download_menu_item" text="http下载工具" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="server 工具">
|
||||
<Menu mnemonicParsing="false" text="server 工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="http-server 请求工具" onAction="#http_server_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="ftp-server 请求工具" onAction="#ftp_server_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="ssh-client 请求工具" onAction="#ssh_client_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="socket-server 服务工具" onAction="#socket_server_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="socket-client-aio 客户端工具" onAction="#socket_client_aio_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="socket-server-aio 服务端工具" onAction="#socket_server_aio_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="socket-server-nio 服务端工具" onAction="#socket_server_nio_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="socket-client-nio 客户端工具" onAction="#socket_client_nio_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="web-socket-client 客户端工具" onAction="#web_socket_client_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#http_server_menu_item" text="http-server 请求工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#ftp_server_menu_item" text="ftp-server 请求工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#ssh_client_menu_item" text="ssh-client 请求工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#socket_server_menu_item" text="socket-server 服务工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#socket_client_aio_menu_item" text="socket-client-aio 客户端工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#socket_server_aio_menu_item" text="socket-server-aio 服务端工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#socket_server_nio_menu_item" text="socket-server-nio 服务端工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#socket_client_nio_menu_item" text="socket-client-nio 客户端工具" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#web_socket_client_menu_item" text="web-socket-client 客户端工具" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="go语言工具">
|
||||
<Menu mnemonicParsing="false" text="go语言工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="json生成结构体" onAction="#json_to_struct_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#json_to_struct_menu_item" text="json生成结构体" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="编辑器工具">
|
||||
<Menu mnemonicParsing="false" text="编辑器工具">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="ace.js 编辑器" onAction="#ace_js_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="monaco.js 编辑器" onAction="#monaco_js_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="codemirror.js 编辑器" onAction="#codemirror_js_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="timefx 编辑器" onAction="#timeFx_fx_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#ace_js_menu_item" text="ace.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#monaco_js_menu_item" text="monaco.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#codemirror_js_menu_item" text="codemirror.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#timeFx_fx_menu_item" text="timefx 编辑器" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
<Menu mnemonicParsing="false" text="编辑器">
|
||||
<Menu mnemonicParsing="false" text="编辑器">
|
||||
<items>
|
||||
<MenuItem mnemonicParsing="false" text="ace.js 编辑器" onAction="#ace_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="monaco.js 编辑器" onAction="#monaco_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="codemirror.js 编辑器" onAction="#codemirror_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" text="timefx 编辑器" onAction="#timeFx_menu_item"/>
|
||||
<MenuItem mnemonicParsing="false" onAction="#ace_menu_item" text="ace.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#monaco_menu_item" text="monaco.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#codemirror_menu_item" text="codemirror.js 编辑器" />
|
||||
<MenuItem mnemonicParsing="false" onAction="#timeFx_menu_item" text="timefx 编辑器" />
|
||||
</items>
|
||||
</Menu>
|
||||
|
||||
</menus>
|
||||
</menus>
|
||||
</MenuBar>
|
||||
<SplitPane fx:id="splitPane" dividerPositions="0.5" layoutY="25.0" prefHeight="575.0" prefWidth="1200.0"
|
||||
AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"
|
||||
AnchorPane.topAnchor="25.0">
|
||||
<items>
|
||||
<ListView fx:id="listView" maxWidth="300.0" minWidth="200.0" prefHeight="200.0" prefWidth="200.0"/>
|
||||
<AnchorPane prefHeight="200.0" prefWidth="200.0"/>
|
||||
</items>
|
||||
</SplitPane>
|
||||
<AnchorPane layoutY="25.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="25.0">
|
||||
<children>
|
||||
|
||||
<SplitPane fx:id="splitPane" dividerPositions="0.5" prefHeight="575.0" prefWidth="1200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="25.0">
|
||||
<items>
|
||||
<ListView fx:id="listView" maxWidth="300.0" minWidth="200.0" prefHeight="634.0" prefWidth="295.0" />
|
||||
<AnchorPane prefHeight="200.0" prefWidth="200.0" />
|
||||
</items>
|
||||
</SplitPane>
|
||||
<MenuBar AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<menus>
|
||||
<Menu mnemonicParsing="false" text="文件">
|
||||
<items>
|
||||
<MenuItem fx:id="open_file" mnemonicParsing="false" text="打开文件" />
|
||||
<MenuItem fx:id="open_dir" mnemonicParsing="false" text="打开文件夹" />
|
||||
<MenuItem fx:id="save" mnemonicParsing="false" text="保存" />
|
||||
</items>
|
||||
</Menu>
|
||||
</menus>
|
||||
</MenuBar>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ Width=1300
|
|||
# 窗体高度,静默配置,双精度浮点型,取值范围 [1, 系统最大限制],默认 850
|
||||
Height=850
|
||||
|
||||
# 编辑器主题
|
||||
AceJsThem=kr_theme
|
||||
|
||||
|
||||
[Interpolator]
|
||||
|
||||
# 动画插值器持续时间
|
||||
|
|
|
|||
Loading…
Reference in New Issue