From d1454f9acb10f639b3693050e5749d3aac252a90 Mon Sep 17 00:00:00 2001
From: zhangmeng <1334717033@qq.com>
Date: Sat, 18 Nov 2023 16:02:01 +0800
Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B411=E6=9C=8818=E6=97=A516:01:46?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 +
.../zhangmeng/tools/components/RxEditer.java | 65 +++++++++++++
.../controller/EditorListImplController.java | 95 +++++++++++++++----
.../tools/controller/HomeController.java | 5 +
src/main/resources/fxml/editor-list-impl.fxml | 2 +-
src/main/resources/fxml/home.fxml | 2 +-
6 files changed, 152 insertions(+), 22 deletions(-)
create mode 100644 src/main/java/com/zhangmeng/tools/components/RxEditer.java
diff --git a/pom.xml b/pom.xml
index 38e801a..5937b23 100644
--- a/pom.xml
+++ b/pom.xml
@@ -481,6 +481,11 @@
2.21.0
+
+ com.fifesoft
+ rsyntaxtextarea
+ 3.3.4
+
diff --git a/src/main/java/com/zhangmeng/tools/components/RxEditer.java b/src/main/java/com/zhangmeng/tools/components/RxEditer.java
new file mode 100644
index 0000000..8f08d3e
--- /dev/null
+++ b/src/main/java/com/zhangmeng/tools/components/RxEditer.java
@@ -0,0 +1,65 @@
+package com.zhangmeng.tools.components;
+
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.embed.swing.SwingNode;
+import javafx.scene.layout.AnchorPane;
+import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
+import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
+import org.fife.ui.rtextarea.RTextScrollPane;
+
+import javax.swing.*;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+
+public class RxEditer extends AnchorPane{
+ private final SimpleIntegerProperty line = new SimpleIntegerProperty();
+ private final SimpleIntegerProperty column = new SimpleIntegerProperty();
+
+ private final RSyntaxTextArea textArea = new RSyntaxTextArea();
+
+ public RSyntaxTextArea getTextArea(){
+ return textArea;
+ }
+
+ public void setText(String text){
+ textArea.setText(text);
+ }
+
+ public RxEditer(String style) {
+ SwingNode sn = new SwingNode();
+ new Thread(()->{
+ SwingUtilities.invokeLater(() -> {
+ textArea.setEditable(true);//编辑器
+ if (style == null || style.equals("")) {
+ textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);//java
+ }else {
+ textArea.setSyntaxEditingStyle(style);
+ }
+ textArea.setCodeFoldingEnabled(true);//折叠代码
+ textArea.addCaretListener(e -> {
+ JTextArea editArea = (JTextArea) e.getSource();
+ int linenum = 1;
+ int columnnum = 1;
+ try {
+ int caretpos = editArea.getCaretPosition();
+ linenum = editArea.getLineOfOffset(caretpos);
+ columnnum = caretpos - editArea.getLineStartOffset(linenum);
+ linenum += 1;
+ columnnum += 1;
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ line.setValue(linenum);
+ column.setValue(columnnum);
+ });
+ RTextScrollPane sp = new RTextScrollPane(textArea);
+ sn.setContent(sp);
+ });
+ }).start();
+ getChildren().add(sn);
+ setTopAnchor(sn, 0.0);
+ setBottomAnchor(sn, 0.0);
+ setLeftAnchor(sn, 0.0);
+ setRightAnchor(sn, 0.0);
+ }
+}
diff --git a/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java b/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java
index b53d9b4..4621190 100644
--- a/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java
+++ b/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java
@@ -2,6 +2,7 @@ package com.zhangmeng.tools.controller;
import com.sun.javafx.PlatformUtil;
import com.zhangmeng.tools.components.RecursiveFileList;
+import com.zhangmeng.tools.components.RxEditer;
import com.zhangmeng.tools.dto.FileTreeView;
import com.zhangmeng.tools.editors.ace.AceEditor;
import com.zhangmeng.tools.editors.ace.AceMode;
@@ -12,6 +13,7 @@ import com.zhangmeng.tools.editors.timifx.TimiFxEditor;
import com.zhangmeng.tools.utils.*;
import javafx.application.Platform;
import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
@@ -45,6 +47,7 @@ import net.imyeyu.timifx.service.RunAsync;
import net.imyeyu.timijava.config.Config;
import net.imyeyu.timijava.config.ConfigManager;
import org.apache.commons.io.FilenameUtils;
+import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fxmisc.flowless.VirtualizedScrollPane;
import org.fxmisc.richtext.CodeArea;
@@ -64,6 +67,8 @@ import static net.imyeyu.timifx.TimiFX.BORDER_EXLEFT;
@Slf4j
public class EditorListImplController {
+ private final SimpleIntegerProperty editer_index = new SimpleIntegerProperty();
+
@FXML
public MenuItem open_file;
@@ -79,6 +84,15 @@ public class EditorListImplController {
@FXML
public MenuItem new_file;
+ public void swing_menu_item(ActionEvent actionEvent) {
+ editer_index.setValue(1);
+ boolean flag = false;
+ if (swingEditor != null) {
+ flag = true;
+ }
+ swingEditor(flag);
+ }
+
public enum Type {
JAVA, HTML, GO, JS, CSS, SQL, XML, YML, MARKDOWN
@@ -90,10 +104,13 @@ public class EditorListImplController {
private AnchorPane root;
private AceEditor acJsEditor;
+
private MonacoWebView monacoEdit;
private CodeMirrWebView codemirror;
private AnchorPane timiFx;
+ private AnchorPane swingEditor;
+
private SimpleObjectProperty choose_file = new SimpleObjectProperty<>(null);
private SimpleObjectProperty choose_them = new SimpleObjectProperty<>(null);
private final ObservableList filePaths_list = FXCollections.observableArrayList();
@@ -507,6 +524,19 @@ public class EditorListImplController {
common_method();
}
+
+ private void swingEditor(boolean flag) {
+ //默认选择第一个
+ listView.getSelectionModel().select(1);
+ if (!flag) {
+ swingEditor = new RxEditer(null);
+ root = swingEditor;
+ } else {
+ root = acJsEditor;
+ }
+ common_method();
+ }
+
private void monacoEdit(boolean flag) {
//默认选择第一个
@@ -666,9 +696,16 @@ public class EditorListImplController {
if (!tabPane.getTabs().contains(tab)) {
if (remove_set.contains(tab)){
//重新加载内容
- AceEditor aceEditor = (AceEditor) tab.getContent();
- aceEditor.setAceText(read_content(file));
- tab.setContent(aceEditor);
+ if (editer_index.getValue() == 0){
+ AceEditor aceEditor = (AceEditor) tab.getContent();
+ aceEditor.setAceText(read_content(file));
+ tab.setContent(aceEditor);
+ }
+ if (editer_index.getValue() == 1){
+ RxEditer sw = (RxEditer) tab.getContent();
+ sw.setText(read_content(file));
+ tab.setContent(sw);
+ }
}
tabPane.getTabs().add(tab);
@@ -725,23 +762,40 @@ public class EditorListImplController {
remove_set.add(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, EditorListImplController.this.choose_them.get());
- 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);
+ //判断是哪个编辑器
+ if (editer_index.getValue() == 0){
+ 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, EditorListImplController.this.choose_them.get());
+ 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);
+ }
+ if (editer_index.getValue() == 1){
+ String style = null;
+ switch (type) {
+ case JAVA -> style = SyntaxConstants.SYNTAX_STYLE_JAVA;
+ case HTML -> style = SyntaxConstants.SYNTAX_STYLE_HTML;
+ case XML -> style = SyntaxConstants.SYNTAX_STYLE_XML;
+ case SQL -> style = SyntaxConstants.SYNTAX_STYLE_SQL;
+ case MARKDOWN -> style = SyntaxConstants.SYNTAX_STYLE_MARKDOWN;
+ }
+ RxEditer rx = new RxEditer(style);
+ rx.setText(file_content);
+ tab.setContent(rx);
+ }
+
tabPane.getTabs().add(tab);
tabPane.getSelectionModel().select(tab);
@@ -1016,7 +1070,7 @@ public class EditorListImplController {
Stage stage = (Stage) splitPane.getScene().getWindow();
stage.setScene(scene);
- ListView listView = (ListView) fx.lookup("#listView");
+ ListView listView = (ListView) fx.lookup("#listView");
listView.getSelectionModel().select(index);
}
@@ -1067,6 +1121,7 @@ public class EditorListImplController {
}
public void ace_menu_item(ActionEvent actionEvent) {
+ editer_index.setValue(0);
boolean flag = false;
if (acJsEditor != null) {
flag = true;
diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java
index 61a9aeb..19548bf 100644
--- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java
+++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java
@@ -689,4 +689,9 @@ public class HomeController implements Serializable {
public void mysql_to_struct_menu_item(ActionEvent actionEvent) {
load_go_tools(1);
}
+
+ public void swing_menu_item(ActionEvent actionEvent) {
+ js_edit_list_impl(1);
+ }
+
}
\ No newline at end of file
diff --git a/src/main/resources/fxml/editor-list-impl.fxml b/src/main/resources/fxml/editor-list-impl.fxml
index 0e87614..2b43228 100644
--- a/src/main/resources/fxml/editor-list-impl.fxml
+++ b/src/main/resources/fxml/editor-list-impl.fxml
@@ -115,7 +115,7 @@