From 8b426d1920b98b854c7427d1f8e3c248128560de Mon Sep 17 00:00:00 2001 From: zhangmeng <1334717033@qq.com> Date: Sat, 18 Nov 2023 17:38:08 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B411=E6=9C=8818=E6=97=A517:35:40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhangmeng/tools/components/RxEditer.java | 76 ++++--- .../controller/EditorListImplController.java | 112 +++++++--- src/main/resources/fxml/editor-list-impl.fxml | 210 ++++++++++-------- 3 files changed, 255 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/zhangmeng/tools/components/RxEditer.java b/src/main/java/com/zhangmeng/tools/components/RxEditer.java index 3f3e051..dccce27 100644 --- a/src/main/java/com/zhangmeng/tools/components/RxEditer.java +++ b/src/main/java/com/zhangmeng/tools/components/RxEditer.java @@ -5,12 +5,15 @@ 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.rsyntaxtextarea.Theme; import org.fife.ui.rtextarea.RTextScrollPane; import javax.swing.*; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import java.awt.*; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; public class RxEditer extends AnchorPane{ private final SimpleIntegerProperty line = new SimpleIntegerProperty(); @@ -30,36 +33,59 @@ public class RxEditer extends AnchorPane{ textArea.setFont(font); } + //选择全部 + public void selectAll(){ + textArea.selectAll(); + } + + private void changeStyleViaThemeXml(String them_name) { + try { + Theme theme = Theme.load(getClass().getResourceAsStream( + "/org/fife/ui/rsyntaxtextarea/themes/" + them_name + ".xml")); + theme.apply(textArea); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + } + + public void setTheme(String them_name){ + changeStyleViaThemeXml(them_name); + } + 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(); + try { + SwingUtilities.invokeAndWait(() -> { + textArea.setEditable(true);//编辑器 + if (style == null || style.equals("")) { + textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);//java + }else { + textArea.setSyntaxEditingStyle(style); } - line.setValue(linenum); - column.setValue(columnnum); + 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); }); - RTextScrollPane sp = new RTextScrollPane(textArea); - sn.setContent(sp); - }); + } catch (InterruptedException | InvocationTargetException e) { + throw new RuntimeException(e); + } }).start(); getChildren().add(sn); setTopAnchor(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 4621190..3472f8c 100644 --- a/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java +++ b/src/main/java/com/zhangmeng/tools/controller/EditorListImplController.java @@ -1,6 +1,7 @@ package com.zhangmeng.tools.controller; import com.sun.javafx.PlatformUtil; +import com.zhangmeng.tools.components.JFontDialog; import com.zhangmeng.tools.components.RecursiveFileList; import com.zhangmeng.tools.components.RxEditer; import com.zhangmeng.tools.dto.FileTreeView; @@ -19,6 +20,8 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.embed.swing.SwingFXUtils; +import javafx.embed.swing.SwingNode; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.event.EventHandler; @@ -51,9 +54,11 @@ import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fxmisc.flowless.VirtualizedScrollPane; import org.fxmisc.richtext.CodeArea; +import javax.swing.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -83,6 +88,8 @@ public class EditorListImplController { @FXML public MenuItem new_file; + public Menu font_item; + public void swing_menu_item(ActionEvent actionEvent) { editer_index.setValue(1); @@ -109,7 +116,7 @@ public class EditorListImplController { private CodeMirrWebView codemirror; private AnchorPane timiFx; - private AnchorPane swingEditor; + private RxEditer swingEditor; private SimpleObjectProperty choose_file = new SimpleObjectProperty<>(null); private SimpleObjectProperty choose_them = new SimpleObjectProperty<>(null); @@ -406,39 +413,94 @@ public class EditorListImplController { // }); // them_list.getItems().add(menuItem); // } - ListView listView = new ListView<>(); - ObservableList objects = FXCollections.observableArrayList(); - for (AceTheme value : AceTheme.values()) { - String them_string = value.toString(); - objects.add(them_string); + if (editer_index.getValue()==null || editer_index.getValue() == 0){ + + ListView listView = new ListView<>(); + + ObservableList objects = FXCollections.observableArrayList(); + for (AceTheme value : AceTheme.values()) { + String them_string = value.toString(); + objects.add(them_string); + } + listView.setItems(objects); + + listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if (newValue!= null){ + if (tabPane.getSelectionModel().getSelectedItem() == null){ + choose_them.setValue(AceTheme.valueOf(newValue)); + AlertUtils.alert_warning("主题选择成功!"); + return; + } + AceEditor aceEditor = (AceEditor) tabPane.getSelectionModel().getSelectedItem().getContent(); + aceEditor.setAceTheme(AceTheme.valueOf(newValue)); + } + } + }); + MenuItem menuItem = new MenuItem("设置主题"); + them_list.getItems().add(menuItem); + menuItem.setOnAction(event -> { + AnchorPane them_choose = new AnchorPane(); + them_choose.setPrefWidth(200); + them_choose.setPrefHeight(400); + them_choose.getChildren().add(listView); + Stage primaryStage = (Stage) EditorListImplController.this.splitPane.getScene().getWindow(); + AlertUtils.alert("设置", them_choose,200,400, primaryStage); + }); } - listView.setItems(objects); - listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable, String oldValue, String newValue) { + if (editer_index.getValue() == 1){ + + ListView listView = new ListView<>(); + + ObservableList objects = FXCollections.observableArrayList(); + objects.add("dark"); + objects.add("default"); + objects.add("default-alt"); + objects.add("druid"); + objects.add("eclipse"); + objects.add("idea"); + objects.add("monokai"); + objects.add("theme"); + objects.add("vs"); + listView.setItems(objects); + + listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { if (newValue!= null){ if (tabPane.getSelectionModel().getSelectedItem() == null){ - choose_them.setValue(AceTheme.valueOf(newValue)); + //choose_them.setValue(newValue); AlertUtils.alert_warning("主题选择成功!"); return; } - AceEditor aceEditor = (AceEditor) tabPane.getSelectionModel().getSelectedItem().getContent(); - aceEditor.setAceTheme(AceTheme.valueOf(newValue)); + RxEditer aceEditor = (RxEditer) tabPane.getSelectionModel().getSelectedItem().getContent(); + aceEditor.setTheme(newValue); } - } - }); - MenuItem menuItem = new MenuItem("设置主题"); - them_list.getItems().add(menuItem); - menuItem.setOnAction(event -> { - AnchorPane them_choose = new AnchorPane(); - them_choose.setPrefWidth(200); - them_choose.setPrefHeight(400); - them_choose.getChildren().add(listView); - Stage primaryStage = (Stage) EditorListImplController.this.splitPane.getScene().getWindow(); - AlertUtils.alert("设置", them_choose,200,400, primaryStage); - }); + }); + + MenuItem menuItem = new MenuItem("设置主题"); + them_list.getItems().add(menuItem); + menuItem.setOnAction(event -> { + AnchorPane them_choose = new AnchorPane(); + them_choose.setPrefWidth(200); + them_choose.setPrefHeight(400); + them_choose.getChildren().add(listView); + Stage primaryStage = (Stage) EditorListImplController.this.splitPane.getScene().getWindow(); + AlertUtils.alert("设置", them_choose,200,400, primaryStage); + }); + + +// SwingNode swingNode = new SwingNode(); +// try { +// SwingUtilities.invokeAndWait(()->{ +// JFontDialog jFontDialog = new JFontDialog(); +// swingNode.setContent(jFontDialog); +// }); +// } catch (InterruptedException | InvocationTargetException e) { +// throw new RuntimeException(e); +// } + } File file = null; FileTreeView fileTreeView = new FileTreeView(file); diff --git a/src/main/resources/fxml/editor-list-impl.fxml b/src/main/resources/fxml/editor-list-impl.fxml index 2b43228..1d0835b 100644 --- a/src/main/resources/fxml/editor-list-impl.fxml +++ b/src/main/resources/fxml/editor-list-impl.fxml @@ -10,144 +10,168 @@ - + - + - - - + + + - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - + - - - - + + + + - + - - - + + + - + - - - - - - - - - + + + + + + + + + - + - + - + - - - - + + + + - + - + - - + + - + - - - - - - - - - - - - - - - - - - - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +