From c547a29b46dc06ad56d1eb6e824b362cb1aa5049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Sat, 30 Sep 2023 06:17:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8F=90=E7=A4=BA=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/manager/ApplicationManager.java | 1 + .../views/manager/RootBorderPaneManager.java | 1 + .../jnotepad/views/manager/RootManager.java | 45 +++++++++++++++++-- .../views/manager/TopMenuBarManager.java | 15 ++++++- .../jnotepad/views/root/RootBorderPane.java | 1 - 5 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java index af42fb0..3ee10fe 100644 --- a/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java +++ b/src/main/java/org/jcnc/jnotepad/app/manager/ApplicationManager.java @@ -168,6 +168,7 @@ public class ApplicationManager { RootRightSideBarVerticalBoxManager.getInstance().initRootRightSideBarVerticalBox(); // 初始化根布局 RootBorderPaneManager.getInstance().initRootBorderPane(); + } public Pane getRoot() { diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/RootBorderPaneManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/RootBorderPaneManager.java index 6e18f29..022a4fe 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/RootBorderPaneManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/RootBorderPaneManager.java @@ -43,5 +43,6 @@ public class RootBorderPaneManager { rootBorderPane.setTopComponent(RootTopBorderPane.getInstance()); // 主界面的下面,底部边栏 rootBorderPane.setBottomComponent(RootBottomSideBarVerticalBox.getInstance()); + } } diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/RootManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/RootManager.java index 8bdcbdb..8a9a6be 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/RootManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/RootManager.java @@ -1,7 +1,15 @@ package org.jcnc.jnotepad.views.manager; +import atlantafx.base.controls.Notification; +import atlantafx.base.theme.Styles; +import atlantafx.base.util.Animations; +import javafx.geometry.Insets; +import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Region; +import javafx.scene.layout.StackPane; +import javafx.util.Duration; import org.jcnc.jnotepad.exception.AppException; import org.jcnc.jnotepad.views.root.RootBorderPane; @@ -15,7 +23,7 @@ import org.jcnc.jnotepad.views.root.RootBorderPane; public class RootManager { private static RootManager instance = null; - + StackPane rootStackPane; /** * 主布局 */ @@ -65,11 +73,42 @@ public class RootManager { * @param scene 与视图相关联的 JavaFX 场景。 */ public void initScreen(Scene scene) { + rootStackPane = new StackPane(); + // 创建主界面布局 - root = new BorderPane(); + BorderPane root = new BorderPane(); root.setCenter(RootBorderPane.getInstance()); - scene.setRoot(root); + rootStackPane.getChildren().addAll(root); + scene.setRoot(rootStackPane); } + + /** + * 将提示框添加到 StackPane 中。 + * + * @param stackPane 要添加提示框的 StackPane。 + * @param msg 要显示的提示框。 + */ + public void addNotificationToStackPane(StackPane stackPane, Notification msg) { + msg.getStyleClass().addAll(Styles.ACCENT, Styles.ELEVATED_1); + msg.setPrefHeight(Region.USE_PREF_SIZE); + msg.setMaxHeight(Region.USE_PREF_SIZE); + StackPane.setAlignment(msg, Pos.TOP_RIGHT); + StackPane.setMargin(msg, new Insets(10, 10, 0, 0)); + + msg.setOnClose(e -> { + var out = Animations.slideOutUp(msg, Duration.millis(250)); + out.setOnFinished(f -> stackPane.getChildren().remove(msg)); + out.playFromStart(); + }); + + + var in = Animations.slideInDown(msg, Duration.millis(250)); + if (!stackPane.getChildren().contains(msg)) { + stackPane.getChildren().add(msg); + } + in.playFromStart(); + } + } diff --git a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java index fd8feeb..63d71d0 100644 --- a/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/views/manager/TopMenuBarManager.java @@ -1,5 +1,6 @@ package org.jcnc.jnotepad.views.manager; +import atlantafx.base.controls.Notification; import atlantafx.base.theme.Styles; import javafx.beans.value.ChangeListener; import javafx.collections.ObservableList; @@ -227,15 +228,27 @@ public class TopMenuBarManager { bottomBox.setAlignment(Pos.BOTTOM_RIGHT); leftBtn.setOnAction(event1 -> { + + // 获取 RootManager 的实例 + RootManager rootManager = RootManager.getInstance(); + + // 创建一个新的 Notification + Notification notification = new Notification(); + notification.setMessage("已成功复制软件信息!"); + + // 调用 RootManager 中的方法来显示 Notification + rootManager.addNotificationToStackPane(rootManager.rootStackPane, notification); + Clipboard clipboard = Clipboard.getSystemClipboard(); ClipboardContent content = new ClipboardContent(); - String info="软件名字:" + APP_NAME + "\t" + "版本:" + VERSION; + String info = "软件名字:" + APP_NAME + "\t" + "版本:" + VERSION; content.putString(info); LogUtil.getLogger(this.getClass()).info("软件信息已经复制到剪贴板:" + info); clipboard.setContent(content); // 关闭当前的 Stage Stage currentStage = (Stage) leftBtn.getScene().getWindow(); currentStage.close(); + }); rightBtn.setOnAction(event1 -> { diff --git a/src/main/java/org/jcnc/jnotepad/views/root/RootBorderPane.java b/src/main/java/org/jcnc/jnotepad/views/root/RootBorderPane.java index 34a9b76..2959c36 100644 --- a/src/main/java/org/jcnc/jnotepad/views/root/RootBorderPane.java +++ b/src/main/java/org/jcnc/jnotepad/views/root/RootBorderPane.java @@ -16,7 +16,6 @@ public class RootBorderPane extends AbstractBorderPane { private static final RootBorderPane INSTANCE = new RootBorderPane(); private RootBorderPane() { - } /**