diff --git a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/BottomStatusBox.java b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/BottomStatusBox.java
index 05d608d7b31d69bb6454072dd7fac99e6abbcd75..ebd603b83f1c72c036d7a55075fd7835572e297f 100644
--- a/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/BottomStatusBox.java
+++ b/src/main/java/org/jcnc/jnotepad/root/center/main/bottom/status/BottomStatusBox.java
@@ -45,6 +45,7 @@ public class BottomStatusBox extends AbstractHorizontalBox {
* 初始化状态栏组件
*/
public void initStatusBox() {
+ this.setStyle("-fx-background-color: rgba(43,43,43,0.12);");
this.getChildren().clear();
// 创建状态栏
@@ -110,9 +111,9 @@ public class BottomStatusBox extends AbstractHorizontalBox {
CenterTabPane instance = CenterTabPane.getInstance();
if (instance.getSelected() != null) {
updateWordCountStatusLabel();
- CenterTab CenterTab = instance.getSelected();
- if (CenterTab != null) {
- updateEncodingLabel(CenterTab.getCharset().name());
+ CenterTab centerTab = instance.getSelected();
+ if (centerTab != null) {
+ updateEncodingLabel(centerTab.getCharset().name());
}
}
}
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 adab40d0bf6b6f857e1623b9369e5b5830c38b77..3524a01d90270dfd4896699b64b43cb7d5f0f1f8 100644
--- a/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java
+++ b/src/main/java/org/jcnc/jnotepad/ui/setstage/SetStage.java
@@ -1,102 +1,221 @@
package org.jcnc.jnotepad.ui.setstage;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.SplitPane;
-import javafx.scene.control.TreeItem;
-import javafx.scene.control.TreeView;
+import javafx.scene.control.*;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
+import javafx.scene.layout.VBox;
import javafx.stage.Stage;
-import org.jcnc.jnotepad.tool.UiUtil;
/**
- * 设置窗口管理类,实现了单例模式。
- *
- *
该类用于管理设置窗口的显示和内容。
- *
- * @author 许轲
+ * SetStage类表示设置窗口的单例对象。此窗口用于显示不同的设置选项和其对应的布局。
+ * 通过调用getInstance方法获取SetStage的实例,并使用openSetStage方法打开设置窗口。
*/
-public class SetStage {
+public class SetStage extends Stage {
- /**
- * 唯一的 SetStage 实例,使用单例模式
- */
- private static final SetStage SET_STAGE = new SetStage();
+ private static SetStage instance;
private StackPane contentDisplay;
+ /**
+ * 私有构造方法以实现单例模式。
+ */
private SetStage() {
- // 私有构造方法以实现单例模式
}
/**
- * 获取 SetStage 的唯一实例。
+ * 获取SetStage的唯一实例。
*
- * @return SetStage 的实例
+ * @return SetStage的实例
*/
public static SetStage getInstance() {
- return SET_STAGE;
+ if (instance == null) {
+ instance = new SetStage();
+ }
+ return instance;
}
/**
- * 打开设置窗口。
+ * 打开设置窗口,显示不同的设置选项和对应的布局。
*/
public void openSetStage() {
- // 创建一个用于显示内容的 StackPane,并初始化为默认显示的标签
- contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容"));
+ Stage primaryStage = new Stage();
+ primaryStage.setTitle("设置窗口");
+
+
+
+ contentDisplay = new StackPane();
- // 创建 TreeView,并初始化设置项
- TreeView settingsTreeView = createTreeView();
+ TreeView treeView = createTreeView();
- // 创建一个分割面板,左侧是设置树,右侧是内容显示区域
- SplitPane splitPane = new SplitPane(settingsTreeView, contentDisplay);
- // 设置分割位置
+ SplitPane splitPane = new SplitPane(treeView, contentDisplay);
splitPane.setDividerPositions(0.3);
- // 创建设置窗口的场景
- Scene scene = new Scene(splitPane, 800, 600);
+ HBox bottomBox= new HBox(10);
+ bottomBox.setAlignment(Pos.CENTER_RIGHT);
+ bottomBox.setStyle("-fx-background-color: rgba(43,43,43,0.12);");
+ bottomBox.setPadding(new Insets(10,10,10,10));
+ Button confirmButton=new Button(" 确认 ");
+ Button cancelButton =new Button(" 取消 ");
+ Button applicationButton =new Button(" 应用 ");
+ bottomBox.getChildren().addAll(confirmButton,cancelButton,applicationButton);
- // 创建设置窗口的 Stage,并设置标题和场景
- Stage setStage = new Stage();
- setStage.setScene(scene);
- setStage.setTitle("设置窗口");
- setStage.getIcons().add(UiUtil.getAppIcon());
- setStage.show();
+
+ BorderPane root = new BorderPane();
+ root.setCenter(splitPane);
+ root.setBottom(bottomBox);
+
+ Scene scene = new Scene(root, 800, 600);
+
+ primaryStage.setScene(scene);
+ primaryStage.show();
}
/**
- * 创建一个 TreeView 并初始化项。
+ * 创建TreeView控件并设置其根节点,包括设置项的层次结构。
*
- * @return 初始化后的 TreeView
+ * @return 创建的TreeView对象
*/
private TreeView createTreeView() {
- TreeItem rootItem = new TreeItem<>("设置");
- rootItem.setExpanded(true);
+ TreeItem root = new TreeItem<>("root");
+ root.setExpanded(true);
+ //常规设置树
TreeItem generalItem = new TreeItem<>("常规设置");
+
+ TreeItem generalItem1 = new TreeItem<>("常规设置项1");
+ TreeItem generalItem2 = new TreeItem<>("常规设置项2");
+ generalItem.getChildren().add(generalItem1);
+ generalItem.getChildren().add(generalItem2);
+
+
+ //外观设置树
TreeItem appearanceItem = new TreeItem<>("外观设置");
- TreeItem securityItem = new TreeItem<>("安全设置");
- generalItem.getChildren().add(new TreeItem<>("常规设置项1"));
- generalItem.getChildren().add(new TreeItem<>("常规设置项2"));
+ TreeItem appearanceItem1 = new TreeItem<>("外观设置项1");
+ TreeItem appearanceItem2 = new TreeItem<>("外观设置项2");
+ appearanceItem.getChildren().add(appearanceItem1);
+ appearanceItem.getChildren().add(appearanceItem2);
- appearanceItem.getChildren().add(new TreeItem<>("外观设置项1"));
- appearanceItem.getChildren().add(new TreeItem<>("外观设置项2"));
+ //安全设置树
+ TreeItem securityItem = new TreeItem<>("安全设置");
- securityItem.getChildren().add(new TreeItem<>("安全设置项1"));
- securityItem.getChildren().add(new TreeItem<>("安全设置项2"));
+ TreeItem securityItem1 = new TreeItem<>("安全设置项1");
+ TreeItem securityItem2 = new TreeItem<>("安全设置项2");
+ securityItem.getChildren().add(securityItem1);
+ securityItem.getChildren().add(securityItem2);
- rootItem.getChildren().add(generalItem);
- rootItem.getChildren().add(appearanceItem);
- rootItem.getChildren().add(securityItem);
+ root.getChildren().add(generalItem);
+ root.getChildren().add(appearanceItem);
+ root.getChildren().add(securityItem);
+ TreeView treeView = new TreeView<>(root);
+ treeView.setShowRoot(false);
- TreeView treeView = new TreeView<>(rootItem);
treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) {
- // 更新内容显示区域为选定项的设置内容标签
- contentDisplay.getChildren().setAll(new Label(newValue.getValue() + " 的设置内容"));
+ String selectedItem = newValue.getValue();
+ Node selectedLayout = createLayoutForSelectedItem(selectedItem);
+ contentDisplay.getChildren().setAll(selectedLayout);
}
});
return treeView;
}
+ private Node createLayoutForSelectedItem(String selectedItem) {
+ return switch (selectedItem) {
+ case "常规设置项1" -> createGeneralSettingsLayout1();
+ case "常规设置项2" -> createGeneralSettingsLayout2();
+ case "外观设置项1" -> createAppearanceSettingsLayout1();
+ case "外观设置项2" -> createAppearanceSettingsLayout2();
+ case "安全设置项1" -> createSecuritySettingsLayout1();
+ case "安全设置项2" -> createSecuritySettingsLayout2();
+ default -> null;
+ };
+ }
+
+ /**
+ * 创建常规设置项1的布局。
+ *
+ * @return 常规设置项1的布局节点
+ */
+ private Node createGeneralSettingsLayout1() {
+ VBox generalLayout = new VBox();
+
+ // 添加一个Label作为设置项的标题
+ Label titleLabel = new Label("常规设置项1");
+
+ // 添加一个TextField用于输入
+ TextField textField = new TextField();
+ textField.setPromptText("输入设置项1的值");
+
+ // 添加一个CheckBox用于开关
+ CheckBox checkBox = new CheckBox("启用设置项1");
+
+ // 添加一个Button用于保存设置
+ Button saveButton = new Button("保存设置");
+
+ // 将所有节点添加到VBox布局中
+ generalLayout.getChildren().addAll(titleLabel, textField, checkBox, saveButton);
+
+ return generalLayout;
+ }
+
+
+ /**
+ * 创建常规设置项2的布局。
+ *
+ * @return 常规设置项2的布局节点
+ */
+ private Node createGeneralSettingsLayout2() {
+ VBox generalLayout = new VBox();
+ generalLayout.getChildren().add(new Label("常规设置项2的布局"));
+ return generalLayout;
+ }
+
+ /**
+ * 创建外观设置项1的布局。
+ *
+ * @return 外观设置项1的布局节点
+ */
+ private Node createAppearanceSettingsLayout1() {
+ VBox appearanceLayout = new VBox();
+ appearanceLayout.getChildren().add(new Label("外观设置项1的布局"));
+ return appearanceLayout;
+ }
+
+ /**
+ * 创建外观设置项2的布局。
+ *
+ * @return 外观设置项2的布局节点
+ */
+ private Node createAppearanceSettingsLayout2() {
+ VBox appearanceLayout = new VBox();
+ appearanceLayout.getChildren().add(new Label("外观设置项2的布局"));
+ return appearanceLayout;
+ }
+
+ /**
+ * 创建安全设置项1的布局。
+ *
+ * @return 安全设置项1的布局节点
+ */
+ private Node createSecuritySettingsLayout1() {
+ VBox securityLayout = new VBox();
+ securityLayout.getChildren().add(new Label("安全设置项1的布局"));
+ return securityLayout;
+ }
+
+ /**
+ * 创建安全设置项2的布局。
+ *
+ * @return 安全设置项2的布局节点
+ */
+ private Node createSecuritySettingsLayout2() {
+ VBox securityLayout = new VBox();
+ securityLayout.getChildren().add(new Label("安全设置项2的布局"));
+ return securityLayout;
+ }
}