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 37b7e50..4d36719 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 @@ -21,7 +21,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 7c8512e..874998e 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -4,100 +4,104 @@ import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.SplitPane; -import javafx.scene.control.TitledPane; import javafx.scene.layout.StackPane; +import javafx.scene.control.TitledPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; -import org.jcnc.jnotepad.tool.UiUtil; /** + * 设置窗口管理类,实现了单例模式。 + * * @author 许轲 */ public class SetStage { + // 唯一的 SetStage 实例,使用单例模式 private static final SetStage SET_STAGE = new SetStage(); - /** - * Declare contentDisplay as a class member - */ private StackPane contentDisplay; + private ListView generalListView; + private ListView appearanceListView; + private ListView securityListView; + + /** + * 获取 SetStage 的唯一实例。 + * + * @return SetStage 的实例 + */ public static SetStage getInstance() { return SET_STAGE; } private SetStage() { - openSetStage(new Stage()); + // 私有构造方法以实现单例模式 } - public void openSetStage(Stage setStage) { - + /** + * 打开设置窗口。 + */ + public void openSetStage() { + // 创建一个用于显示内容的 StackPane,并初始化为默认显示的标签 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")); + // 创建不同设置类别的 ListView,并初始化设置项 + generalListView = createListView("常规设置项1", "常规设置项2"); + appearanceListView = createListView("外观设置项1", "外观设置项2"); + securityListView = 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,每个面板包含一个标题和对应的设置列表 + TitledPane generalPane = new TitledPane("常规设置", generalListView); + TitledPane appearancePane = new TitledPane("外观设置", appearanceListView); + TitledPane securityPane = new TitledPane("安全设置", securityListView); - appearancePane.setOnMouseClicked(event -> { - ListView listView = (ListView) appearancePane.getContent(); - if (listView.getSelectionModel().getSelectedItem() != null) { - contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); - } - }); + // 为 TitledPanes 添加点击事件监听器,用于更新内容显示区域 + generalPane.setOnMouseClicked(event -> updateContentDisplay(generalListView)); + appearancePane.setOnMouseClicked(event -> updateContentDisplay(appearanceListView)); + securityPane.setOnMouseClicked(event -> updateContentDisplay(securityListView)); - securityPane.setOnMouseClicked(event -> { - ListView listView = (ListView) securityPane.getContent(); - if (listView.getSelectionModel().getSelectedItem() != null) { - contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); - } - }); - - // 创建一个 VBox 来容纳 TitledPanes + // 创建一个垂直布局容器,将 TitledPanes 放入其中 VBox titledPaneContainer = new VBox(10); titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane); - // 创建一个占位符,用于显示右侧内容区域 - StackPane stackPane = new StackPane(new Label("从左侧选择设置以显示内容")); + // 创建一个分割面板,左侧是设置列表,右侧是内容显示区域 + SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay); + splitPane.setDividerPositions(0.3); // 设置分割位置 - // 设置 TitledPanes 的点击事件监听器 - generalPane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("常规设置内容"))); - appearancePane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("外观设置内容"))); - securityPane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("安全设置内容"))); - - // 创建一个水平分割面板来容纳整个布局 - SplitPane splitPane = new SplitPane(titledPaneContainer, stackPane); - // 设置分隔条位置 - splitPane.setDividerPositions(0.3); - - // 创建场景 + // 创建设置窗口的场景 Scene scene = new Scene(splitPane, 800, 600); - // 设置场景并显示窗口 + // 创建设置窗口的 Stage,并设置标题和场景 + Stage setStage = new Stage(); setStage.setScene(scene); setStage.setTitle("设置窗口"); - setStage.getIcons().add(UiUtil.getIcon()); setStage.show(); } + /** + * 创建一个 ListView 并初始化项。 + * + * @param items 要添加到 ListView 的项 + * @return 初始化后的 ListView + */ private ListView createListView(String... items) { 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 + " 的设置内容")); - } - }); return listView; } + /** + * 更新内容显示区域,根据选定的列表项显示相应的设置内容。 + * + * @param listView 选定项所属的 ListView + */ + private void updateContentDisplay(ListView listView) { + String selectedItem = listView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + // 更新内容显示区域为选定项的设置内容标签 + contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); + } + } + + }