From 3add6372ab369ee763934c2b1164ca494258393f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Wed, 30 Aug 2023 10:19:10 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=BA=86=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=AE=9A=E4=B9=89=E7=9A=84=20contentDisplay=20?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/event/handler/tool/SetBtn.java | 2 +- .../jcnc/jnotepad/ui/setStage/SetStage.java | 64 +++++-------------- 2 files changed, 18 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java index 035b2f8..230c1b6 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java @@ -31,7 +31,7 @@ public class SetBtn implements EventHandler { */ @Override public void handle(ActionEvent event) { - SetStage.getInstance(); + SetStage.getInstance().openSetStage(); } diff --git a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java index ca0d4f4..e562997 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -12,66 +12,37 @@ import javafx.stage.Stage; public class SetStage { private static final SetStage SET_STAGE = new SetStage(); - private StackPane contentDisplay; // Declare contentDisplay as a class member + private StackPane contentDisplay; public static SetStage getInstance() { return SET_STAGE; } private SetStage() { - openSetStage(new Stage()); + // Private constructor to enforce Singleton pattern } - public void openSetStage(Stage setStage) { - + public void openSetStage() { contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); - // 创建 TitledPane 组件 TitledPane generalPane = new TitledPane("常规设置", createListView("常规设置项1", "常规设置项2")); TitledPane appearancePane = new TitledPane("外观设置", createListView("外观设置项1", "外观设置项2")); TitledPane securityPane = new TitledPane("安全设置", createListView("安全设置项1", "安全设置项2")); - generalPane.setOnMouseClicked(event -> { - ListView listView = (ListView) generalPane.getContent(); - if (listView.getSelectionModel().getSelectedItem() != null) { - contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); - } - }); + // 设置 TitledPanes 的点击事件监听器 + generalPane.setOnMouseClicked(event -> updateContentDisplay((ListView) generalPane.getContent())); + appearancePane.setOnMouseClicked(event -> updateContentDisplay((ListView) appearancePane.getContent())); + securityPane.setOnMouseClicked(event -> updateContentDisplay((ListView) securityPane.getContent())); - appearancePane.setOnMouseClicked(event -> { - ListView listView = (ListView) appearancePane.getContent(); - if (listView.getSelectionModel().getSelectedItem() != null) { - contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); - } - }); - - securityPane.setOnMouseClicked(event -> { - ListView listView = (ListView) securityPane.getContent(); - if (listView.getSelectionModel().getSelectedItem() != null) { - contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); - } - }); - - // 创建一个 VBox 来容纳 TitledPanes VBox titledPaneContainer = new VBox(10); titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane); - // 创建一个占位符,用于显示右侧内容区域 - StackPane contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); - - // 设置 TitledPanes 的点击事件监听器 - generalPane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("常规设置内容"))); - appearancePane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("外观设置内容"))); - securityPane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("安全设置内容"))); - - // 创建一个水平分割面板来容纳整个布局 SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay); - splitPane.setDividerPositions(0.3); // 设置分隔条位置 + splitPane.setDividerPositions(0.3); - // 创建场景 Scene scene = new Scene(splitPane, 800, 600); - // 设置场景并显示窗口 + Stage setStage = new Stage(); setStage.setScene(scene); setStage.setTitle("设置窗口"); setStage.show(); @@ -81,16 +52,15 @@ public class SetStage { ListView listView = new ListView<>(); listView.getItems().addAll(items); - listView.setOnMouseClicked(event -> { - String selectedItem = listView.getSelectionModel().getSelectedItem(); - if (selectedItem != null) { - contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); - } - }); + listView.setOnMouseClicked(event -> updateContentDisplay(listView)); return listView; } - - -} + private void updateContentDisplay(ListView listView) { + String selectedItem = listView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); + } + } +} \ No newline at end of file From a316425ab03322c87b73dc3f5bc37b188515956a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E8=BD=B2?= Date: Wed, 30 Aug 2023 11:38:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcnc/jnotepad/ui/setStage/SetStage.java | 74 ++++++++++++++----- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java index e562997..d1cff0b 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -1,66 +1,104 @@ package org.jcnc.jnotepad.ui.setStage; -import javafx.geometry.Insets; import javafx.scene.Scene; -import javafx.scene.control.*; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.HBox; +import javafx.scene.control.Label; +import javafx.scene.control.ListView; +import javafx.scene.control.SplitPane; import javafx.scene.layout.StackPane; +import javafx.scene.control.TitledPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; +/** + * 设置窗口管理类,实现了单例模式。 + * + * @author 许轲 + */ public class SetStage { + // 唯一的 SetStage 实例,使用单例模式 private static final SetStage SET_STAGE = new SetStage(); private StackPane contentDisplay; + private ListView generalListView; + private ListView appearanceListView; + private ListView securityListView; + + /** + * 获取 SetStage 的唯一实例。 + * + * @return SetStage 的实例 + */ public static SetStage getInstance() { return SET_STAGE; } private SetStage() { - // Private constructor to enforce Singleton pattern + // 私有构造方法以实现单例模式 } + /** + * 打开设置窗口。 + */ public void openSetStage() { + // 创建一个用于显示内容的 StackPane,并初始化为默认显示的标签 contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); - TitledPane generalPane = new TitledPane("常规设置", createListView("常规设置项1", "常规设置项2")); - TitledPane appearancePane = new TitledPane("外观设置", createListView("外观设置项1", "外观设置项2")); - TitledPane securityPane = new TitledPane("安全设置", createListView("安全设置项1", "安全设置项2")); + // 创建不同设置类别的 ListView,并初始化设置项 + generalListView = createListView("常规设置项1", "常规设置项2"); + appearanceListView = createListView("外观设置项1", "外观设置项2"); + securityListView = createListView("安全设置项1", "安全设置项2"); - // 设置 TitledPanes 的点击事件监听器 - generalPane.setOnMouseClicked(event -> updateContentDisplay((ListView) generalPane.getContent())); - appearancePane.setOnMouseClicked(event -> updateContentDisplay((ListView) appearancePane.getContent())); - securityPane.setOnMouseClicked(event -> updateContentDisplay((ListView) securityPane.getContent())); + // 创建 TitledPanes,每个面板包含一个标题和对应的设置列表 + TitledPane generalPane = new TitledPane("常规设置", generalListView); + TitledPane appearancePane = new TitledPane("外观设置", appearanceListView); + TitledPane securityPane = new TitledPane("安全设置", securityListView); + // 为 TitledPanes 添加点击事件监听器,用于更新内容显示区域 + generalPane.setOnMouseClicked(event -> updateContentDisplay(generalListView)); + appearancePane.setOnMouseClicked(event -> updateContentDisplay(appearanceListView)); + securityPane.setOnMouseClicked(event -> updateContentDisplay(securityListView)); + + // 创建一个垂直布局容器,将 TitledPanes 放入其中 VBox titledPaneContainer = new VBox(10); titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane); + // 创建一个分割面板,左侧是设置列表,右侧是内容显示区域 SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay); - splitPane.setDividerPositions(0.3); + splitPane.setDividerPositions(0.3); // 设置分割位置 + // 创建设置窗口的场景 Scene scene = new Scene(splitPane, 800, 600); + // 创建设置窗口的 Stage,并设置标题和场景 Stage setStage = new Stage(); setStage.setScene(scene); setStage.setTitle("设置窗口"); - setStage.show(); + setStage.show(); // 显示设置窗口 } + /** + * 创建一个 ListView 并初始化项。 + * + * @param items 要添加到 ListView 的项 + * @return 初始化后的 ListView + */ private ListView createListView(String... items) { ListView listView = new ListView<>(); listView.getItems().addAll(items); - - listView.setOnMouseClicked(event -> updateContentDisplay(listView)); - return listView; } + /** + * 更新内容显示区域,根据选定的列表项显示相应的设置内容。 + * + * @param listView 选定项所属的 ListView + */ private void updateContentDisplay(ListView listView) { String selectedItem = listView.getSelectionModel().getSelectedItem(); if (selectedItem != null) { + // 更新内容显示区域为选定项的设置内容标签 contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); } } -} \ No newline at end of file +}