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>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fifesoft</groupId>
|
||||
<artifactId>rsyntaxtextarea</artifactId>
|
||||
<version>3.3.4</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<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.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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue