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 b47794f..0292737 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -2,11 +2,10 @@ package org.jcnc.jnotepad.ui.setStage; 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.control.TreeItem; +import javafx.scene.control.TreeView; import javafx.scene.layout.StackPane; -import javafx.scene.layout.VBox; import javafx.stage.Stage; import org.jcnc.jnotepad.tool.UiUtil; @@ -23,9 +22,7 @@ public class SetStage { private static final SetStage SET_STAGE = new SetStage(); private StackPane contentDisplay; - private ListView generalListView; - private ListView appearanceListView; - private ListView securityListView; + private TreeView settingsTreeView; private SetStage() { // 私有构造方法以实现单例模式 @@ -47,27 +44,11 @@ public class SetStage { // 创建一个用于显示内容的 StackPane,并初始化为默认显示的标签 contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); - // 创建不同设置类别的 ListView,并初始化设置项 - generalListView = createListView("常规设置项1", "常规设置项2"); - appearanceListView = createListView("外观设置项1", "外观设置项2"); - securityListView = createListView("安全设置项1", "安全设置项2"); + // 创建 TreeView,并初始化设置项 + settingsTreeView = createTreeView(); - // 创建 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 splitPane = new SplitPane(settingsTreeView, contentDisplay); // 设置分割位置 splitPane.setDividerPositions(0.3); @@ -83,27 +64,40 @@ public class SetStage { } /** - * 创建一个 ListView 并初始化项。 + * 创建一个 TreeView 并初始化项。 * - * @param items 要添加到 ListView 的项 - * @return 初始化后的 ListView + * @return 初始化后的 TreeView */ - private ListView createListView(String... items) { - ListView listView = new ListView<>(); - listView.getItems().addAll(items); - return listView; - } + private TreeView createTreeView() { + TreeItem rootItem = new TreeItem<>("设置"); + rootItem.setExpanded(true); - /** - * 更新内容显示区域,根据选定的列表项显示相应的设置内容。 - * - * @param listView 选定项所属的 ListView - */ - private void updateContentDisplay(ListView listView) { - String selectedItem = listView.getSelectionModel().getSelectedItem(); - if (selectedItem != null) { - // 更新内容显示区域为选定项的设置内容标签 - contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); - } + TreeItem generalItem = new TreeItem<>("常规设置"); + TreeItem appearanceItem = new TreeItem<>("外观设置"); + TreeItem securityItem = new TreeItem<>("安全设置"); + + generalItem.getChildren().add(new TreeItem<>("常规设置项1")); + generalItem.getChildren().add(new TreeItem<>("常规设置项2")); + + appearanceItem.getChildren().add(new TreeItem<>("外观设置项1")); + appearanceItem.getChildren().add(new TreeItem<>("外观设置项2")); + + + securityItem.getChildren().add(new TreeItem<>("安全设置项1")); + securityItem.getChildren().add(new TreeItem<>("安全设置项2")); + + rootItem.getChildren().add(generalItem); + rootItem.getChildren().add(appearanceItem); + rootItem.getChildren().add(securityItem); + + TreeView treeView = new TreeView<>(rootItem); + treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + // 更新内容显示区域为选定项的设置内容标签 + contentDisplay.getChildren().setAll(new Label(newValue.getValue() + " 的设置内容")); + } + }); + + return treeView; } }