From 2bda1d80976729ec15321bb52d906bb8727ad404 Mon Sep 17 00:00:00 2001 From: songdragon Date: Sat, 19 Aug 2023 14:53:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20#I7UFUR=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BD=BF=E7=94=A8LineNumberTextArea=E8=87=AA=E5=8A=A8=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=92=8C=E7=BB=9F=E8=AE=A1=E5=A4=B1=E6=95=88=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcnc/jnotepad/controller/event/handler/NewFile.java | 9 +++------ .../org/jcnc/jnotepad/controller/manager/Controller.java | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java index 0a7fae9..7482cd3 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java @@ -25,9 +25,6 @@ public class NewFile implements EventHandler { // 获取控制器 Controller controller = Controller.getInstance(); - LineNumberTextArea lineNumberTextArea = new LineNumberTextArea(); - - // 创建一个新的文本编辑区 LineNumberTextArea textArea = new LineNumberTextArea(); @@ -42,7 +39,7 @@ public class NewFile implements EventHandler { // 创建一个新的Tab页 Tab tab = new Tab("新建文本 " + ++ViewManager.tabIndex); - tab.setContent(lineNumberTextArea.getMainTextArea()); + tab.setContent(textArea); // 将Tab页添加到TabPane中 tabPane.getTabs().add(tab); @@ -51,9 +48,9 @@ public class NewFile implements EventHandler { tabPane.getSelectionModel().select(tab); // 更新状态标签 - controller.updateStatusLabel(lineNumberTextArea); + controller.updateStatusLabel(textArea); // 更新编码信息 - controller.upDateEncodingLabel(lineNumberTextArea.getMainTextArea().getText()); + controller.upDateEncodingLabel(textArea.getMainTextArea().getText()); } } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index 00f8fa1..3eff541 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -93,7 +93,7 @@ public class Controller implements ControllerInterface { */ @Override public void autoSave(LineNumberTextArea textArea) { - textArea.textProperty().addListener((observable, oldValue, newValue) -> { + textArea.getMainTextArea().textProperty().addListener((observable, oldValue, newValue) -> { Tab tab = ViewManager.tabPane.getSelectionModel().getSelectedItem(); if (tab != null) { File file = (File) tab.getUserData(); From 7cf9ba2eac5421c6c0933185eb9eeaa68e853041 Mon Sep 17 00:00:00 2001 From: songdragon Date: Sat, 19 Aug 2023 15:23:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E9=9A=90=E8=97=8F=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/jcnc/jnotepad/LunchApp.java | 1 + .../org/jcnc/jnotepad/ui/LineNumberTextArea.java | 8 ++++---- src/main/resources/styles.css | 14 +++++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/LunchApp.java b/src/main/java/org/jcnc/jnotepad/LunchApp.java index 3fb856c..d3d4944 100644 --- a/src/main/java/org/jcnc/jnotepad/LunchApp.java +++ b/src/main/java/org/jcnc/jnotepad/LunchApp.java @@ -42,6 +42,7 @@ public class LunchApp extends Application { scene = new Scene(root, width, length); Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet()); + scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/styles.css")).toExternalForm()); primaryStage.setTitle(name); primaryStage.setWidth(width); diff --git a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java index d44d41f..60bc198 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java @@ -17,11 +17,11 @@ public class LineNumberTextArea extends BorderPane { mainTextArea = new TextArea(); lineNumberArea = new TextArea(); lineNumberArea.setEditable(false); - lineNumberArea.setMinWidth(55); - lineNumberArea.setMaxWidth(55); + lineNumberArea.setMinWidth(30); + lineNumberArea.setMaxWidth(30); // 设置显示滚动条样式类 -/* lineNumberArea.getStyleClass().add("hide-scrollbars"); - mainTextArea.getStyleClass().add("show-scrollbars"); */ + lineNumberArea.getStyleClass().add("text-line-number"); + /*mainTextArea.getStyleClass().add("show-scrollbars"); */ mainTextArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberArea()); diff --git a/src/main/resources/styles.css b/src/main/resources/styles.css index 4184796..c69dd13 100644 --- a/src/main/resources/styles.css +++ b/src/main/resources/styles.css @@ -5,7 +5,15 @@ } /* 不显示滚动条 */ -.hide-scrollbars .scroll-pane { - -fx-hbar-policy: never; - -fx-vbar-policy: never; +.text-line-number .content{ + -fx-cursor: text; + -fx-padding: 8px 1px 8px 1px; } +.text-line-number .scroll-bar:vertical { + -fx-pref-width: 1; + -fx-opacity: 0; +} +.text-line-number .scroll-bar:horizontal { + -fx-pref-height: 1; + -fx-opacity: 0; +} \ No newline at end of file From 87ce23ce122860dcb3d046697403c5d0bcda054c Mon Sep 17 00:00:00 2001 From: songdragon Date: Sat, 19 Aug 2023 16:04:00 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E8=A1=8C=E5=8F=B7=E5=AE=BD?= =?UTF-8?q?=E5=BA=A6=E6=A0=B9=E6=8D=AE=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7=E8=87=AA=E5=8A=A8=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcnc/jnotepad/ui/LineNumberTextArea.java | 24 ++++++++++++++++--- src/main/resources/styles.css | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java index 60bc198..bdaaa9e 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/LineNumberTextArea.java @@ -13,16 +13,18 @@ public class LineNumberTextArea extends BorderPane { private final TextArea mainTextArea; private final TextArea lineNumberArea; + static final int[] sizeTable = {9, 99, 999, 9999, 99999, 999999, 9999999, + 99999999, 999999999, Integer.MAX_VALUE}; + public LineNumberTextArea() { mainTextArea = new TextArea(); lineNumberArea = new TextArea(); lineNumberArea.setEditable(false); - lineNumberArea.setMinWidth(30); - lineNumberArea.setMaxWidth(30); + lineNumberArea.setPrefWidth(30); // 设置显示滚动条样式类 lineNumberArea.getStyleClass().add("text-line-number"); /*mainTextArea.getStyleClass().add("show-scrollbars"); */ - + lineNumberArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberWidth()); mainTextArea.textProperty().addListener((observable, oldValue, newValue) -> updateLineNumberArea()); // 当主要文本区域的垂直滚动位置发生变化时,使行号文本区域的滚动位置保持一致 @@ -39,6 +41,22 @@ public class LineNumberTextArea extends BorderPane { setLeft(lineNumberArea); } + private void updateLineNumberWidth() { + int numOfLines = mainTextArea.getParagraphs().size(); + int count = 1; + for (int i = 0; i < sizeTable.length; i++) { + if (numOfLines <= sizeTable[i]) { + count = i + 1; + break; + } + } + //单数字宽度10像素,4为padding=左3+右1 + int actualWidth = count * 10 + 4; + if (actualWidth > lineNumberArea.getWidth()) { + lineNumberArea.setPrefWidth(actualWidth); + } + } + public StringProperty textProperty() { return mainTextArea.textProperty(); } diff --git a/src/main/resources/styles.css b/src/main/resources/styles.css index c69dd13..42b923b 100644 --- a/src/main/resources/styles.css +++ b/src/main/resources/styles.css @@ -7,7 +7,7 @@ /* 不显示滚动条 */ .text-line-number .content{ -fx-cursor: text; - -fx-padding: 8px 1px 8px 1px; + -fx-padding: 8px 1px 8px 5px; } .text-line-number .scroll-bar:vertical { -fx-pref-width: 1;