优化设置页面的样式

This commit is contained in:
许轲 2023-09-01 02:24:08 +08:00
parent 105a7fff15
commit e7fd2213e7

View File

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