2023年11月18日16:01:46
parent
333be28e0e
commit
d1454f9acb
5
pom.xml
5
pom.xml
|
|
@ -481,6 +481,11 @@
|
||||||
<version>2.21.0</version>
|
<version>2.21.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fifesoft</groupId>
|
||||||
|
<artifactId>rsyntaxtextarea</artifactId>
|
||||||
|
<version>3.3.4</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ package com.zhangmeng.tools.controller;
|
||||||
|
|
||||||
import com.sun.javafx.PlatformUtil;
|
import com.sun.javafx.PlatformUtil;
|
||||||
import com.zhangmeng.tools.components.RecursiveFileList;
|
import com.zhangmeng.tools.components.RecursiveFileList;
|
||||||
|
import com.zhangmeng.tools.components.RxEditer;
|
||||||
import com.zhangmeng.tools.dto.FileTreeView;
|
import com.zhangmeng.tools.dto.FileTreeView;
|
||||||
import com.zhangmeng.tools.editors.ace.AceEditor;
|
import com.zhangmeng.tools.editors.ace.AceEditor;
|
||||||
import com.zhangmeng.tools.editors.ace.AceMode;
|
import com.zhangmeng.tools.editors.ace.AceMode;
|
||||||
|
|
@ -12,6 +13,7 @@ import com.zhangmeng.tools.editors.timifx.TimiFxEditor;
|
||||||
import com.zhangmeng.tools.utils.*;
|
import com.zhangmeng.tools.utils.*;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.property.SimpleDoubleProperty;
|
import javafx.beans.property.SimpleDoubleProperty;
|
||||||
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
import javafx.beans.value.ObservableValue;
|
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.Config;
|
||||||
import net.imyeyu.timijava.config.ConfigManager;
|
import net.imyeyu.timijava.config.ConfigManager;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
|
||||||
import org.fxmisc.flowless.VirtualizedScrollPane;
|
import org.fxmisc.flowless.VirtualizedScrollPane;
|
||||||
import org.fxmisc.richtext.CodeArea;
|
import org.fxmisc.richtext.CodeArea;
|
||||||
|
|
||||||
|
|
@ -64,6 +67,8 @@ import static net.imyeyu.timifx.TimiFX.BORDER_EXLEFT;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class EditorListImplController {
|
public class EditorListImplController {
|
||||||
|
|
||||||
|
private final SimpleIntegerProperty editer_index = new SimpleIntegerProperty();
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public MenuItem open_file;
|
public MenuItem open_file;
|
||||||
|
|
||||||
|
|
@ -79,6 +84,15 @@ public class EditorListImplController {
|
||||||
@FXML
|
@FXML
|
||||||
public MenuItem new_file;
|
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 {
|
public enum Type {
|
||||||
|
|
||||||
JAVA, HTML, GO, JS, CSS, SQL, XML, YML, MARKDOWN
|
JAVA, HTML, GO, JS, CSS, SQL, XML, YML, MARKDOWN
|
||||||
|
|
@ -90,10 +104,13 @@ public class EditorListImplController {
|
||||||
private AnchorPane root;
|
private AnchorPane root;
|
||||||
|
|
||||||
private AceEditor acJsEditor;
|
private AceEditor acJsEditor;
|
||||||
|
|
||||||
private MonacoWebView monacoEdit;
|
private MonacoWebView monacoEdit;
|
||||||
private CodeMirrWebView codemirror;
|
private CodeMirrWebView codemirror;
|
||||||
private AnchorPane timiFx;
|
private AnchorPane timiFx;
|
||||||
|
|
||||||
|
private AnchorPane swingEditor;
|
||||||
|
|
||||||
private SimpleObjectProperty<File> choose_file = new SimpleObjectProperty<>(null);
|
private SimpleObjectProperty<File> choose_file = new SimpleObjectProperty<>(null);
|
||||||
private SimpleObjectProperty<AceTheme> choose_them = new SimpleObjectProperty<>(null);
|
private SimpleObjectProperty<AceTheme> choose_them = new SimpleObjectProperty<>(null);
|
||||||
private final ObservableList<Path> filePaths_list = FXCollections.observableArrayList();
|
private final ObservableList<Path> filePaths_list = FXCollections.observableArrayList();
|
||||||
|
|
@ -507,6 +524,19 @@ public class EditorListImplController {
|
||||||
common_method();
|
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) {
|
private void monacoEdit(boolean flag) {
|
||||||
|
|
||||||
//默认选择第一个
|
//默认选择第一个
|
||||||
|
|
@ -666,9 +696,16 @@ public class EditorListImplController {
|
||||||
if (!tabPane.getTabs().contains(tab)) {
|
if (!tabPane.getTabs().contains(tab)) {
|
||||||
if (remove_set.contains(tab)){
|
if (remove_set.contains(tab)){
|
||||||
//重新加载内容
|
//重新加载内容
|
||||||
AceEditor aceEditor = (AceEditor) tab.getContent();
|
if (editer_index.getValue() == 0){
|
||||||
aceEditor.setAceText(read_content(file));
|
AceEditor aceEditor = (AceEditor) tab.getContent();
|
||||||
tab.setContent(aceEditor);
|
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);
|
tabPane.getTabs().add(tab);
|
||||||
|
|
@ -725,23 +762,40 @@ public class EditorListImplController {
|
||||||
remove_set.add(tab);
|
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.getTabs().add(tab);
|
||||||
tabPane.getSelectionModel().select(tab);
|
tabPane.getSelectionModel().select(tab);
|
||||||
|
|
||||||
|
|
@ -1016,7 +1070,7 @@ public class EditorListImplController {
|
||||||
Stage stage = (Stage) splitPane.getScene().getWindow();
|
Stage stage = (Stage) splitPane.getScene().getWindow();
|
||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
|
|
||||||
ListView<ResourcesUtils.Player> listView = (ListView) fx.lookup("#listView");
|
ListView<ResourcesUtils.EditorList> listView = (ListView) fx.lookup("#listView");
|
||||||
listView.getSelectionModel().select(index);
|
listView.getSelectionModel().select(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1067,6 +1121,7 @@ public class EditorListImplController {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ace_menu_item(ActionEvent actionEvent) {
|
public void ace_menu_item(ActionEvent actionEvent) {
|
||||||
|
editer_index.setValue(0);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
if (acJsEditor != null) {
|
if (acJsEditor != null) {
|
||||||
flag = true;
|
flag = true;
|
||||||
|
|
|
||||||
|
|
@ -689,4 +689,9 @@ public class HomeController implements Serializable {
|
||||||
public void mysql_to_struct_menu_item(ActionEvent actionEvent) {
|
public void mysql_to_struct_menu_item(ActionEvent actionEvent) {
|
||||||
load_go_tools(1);
|
load_go_tools(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void swing_menu_item(ActionEvent actionEvent) {
|
||||||
|
js_edit_list_impl(1);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
<Menu mnemonicParsing="false" text="编辑器">
|
<Menu mnemonicParsing="false" text="编辑器">
|
||||||
<items>
|
<items>
|
||||||
<MenuItem mnemonicParsing="false" onAction="#ace_menu_item" text="ace.js 编辑器" />
|
<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="#codemirror_menu_item" text="codemirror.js 编辑器" />-->
|
||||||
<!-- <MenuItem mnemonicParsing="false" onAction="#timeFx_menu_item" text="timefx 编辑器" />-->
|
<!-- <MenuItem mnemonicParsing="false" onAction="#timeFx_menu_item" text="timefx 编辑器" />-->
|
||||||
</items>
|
</items>
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@
|
||||||
<Menu mnemonicParsing="false" text="编辑器">
|
<Menu mnemonicParsing="false" text="编辑器">
|
||||||
<items>
|
<items>
|
||||||
<MenuItem mnemonicParsing="false" text="ace.js 编辑器" onAction="#ace_menu_item"/>
|
<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="codemirror.js 编辑器" onAction="#codemirror_menu_item"/>-->
|
||||||
<!-- <MenuItem mnemonicParsing="false" text="timefx 编辑器" onAction="#timeFx_menu_item"/>-->
|
<!-- <MenuItem mnemonicParsing="false" text="timefx 编辑器" onAction="#timeFx_menu_item"/>-->
|
||||||
</items>
|
</items>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue