2023年11月18日16:01:46

master
zhangmeng 2023-11-18 16:02:01 +08:00
parent 333be28e0e
commit d1454f9acb
6 changed files with 152 additions and 22 deletions

View File

@ -481,6 +481,11 @@
<version>2.21.0</version>
</dependency>
<dependency>
<groupId>com.fifesoft</groupId>
<artifactId>rsyntaxtextarea</artifactId>
<version>3.3.4</version>
</dependency>
</dependencies>
<build>

View File

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

View File

@ -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<File> choose_file = new SimpleObjectProperty<>(null);
private SimpleObjectProperty<AceTheme> choose_them = new SimpleObjectProperty<>(null);
private final ObservableList<Path> 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<ResourcesUtils.Player> listView = (ListView) fx.lookup("#listView");
ListView<ResourcesUtils.EditorList> 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;

View File

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

View File

@ -115,7 +115,7 @@
<Menu mnemonicParsing="false" text="编辑器">
<items>
<MenuItem mnemonicParsing="false" onAction="#ace_menu_item" text="ace.js 编辑器" />
<!-- <MenuItem mnemonicParsing="false" onAction="#monaco_menu_item" text="monaco.js 编辑器" />-->
<MenuItem mnemonicParsing="false" text="swing编辑器" onAction="#swing_menu_item"/>
<!-- <MenuItem mnemonicParsing="false" onAction="#codemirror_menu_item" text="codemirror.js 编辑器" />-->
<!-- <MenuItem mnemonicParsing="false" onAction="#timeFx_menu_item" text="timefx 编辑器" />-->
</items>

View File

@ -117,7 +117,7 @@
<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="swing编辑器" onAction="#swing_menu_item"/>
<!-- <MenuItem mnemonicParsing="false" text="codemirror.js 编辑器" onAction="#codemirror_menu_item"/>-->
<!-- <MenuItem mnemonicParsing="false" text="timefx 编辑器" onAction="#timeFx_menu_item"/>-->
</items>