!72 完善设置页面

Merge pull request !72 from Luke/release-v1.1.12
This commit is contained in:
Luke 2023-09-03 18:02:14 +00:00 committed by Gitee
commit 3b15692870
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 176 additions and 56 deletions

View File

@ -45,6 +45,7 @@ public class BottomStatusBox extends AbstractHorizontalBox {
* 初始化状态栏组件 * 初始化状态栏组件
*/ */
public void initStatusBox() { public void initStatusBox() {
this.setStyle("-fx-background-color: rgba(43,43,43,0.12);");
this.getChildren().clear(); this.getChildren().clear();
// 创建状态栏 // 创建状态栏
@ -110,9 +111,9 @@ public class BottomStatusBox extends AbstractHorizontalBox {
CenterTabPane instance = CenterTabPane.getInstance(); CenterTabPane instance = CenterTabPane.getInstance();
if (instance.getSelected() != null) { if (instance.getSelected() != null) {
updateWordCountStatusLabel(); updateWordCountStatusLabel();
CenterTab CenterTab = instance.getSelected(); CenterTab centerTab = instance.getSelected();
if (CenterTab != null) { if (centerTab != null) {
updateEncodingLabel(CenterTab.getCharset().name()); updateEncodingLabel(centerTab.getCharset().name());
} }
} }
} }

View File

@ -1,31 +1,29 @@
package org.jcnc.jnotepad.ui.setstage; 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.Scene;
import javafx.scene.control.Label; import javafx.scene.control.*;
import javafx.scene.control.SplitPane; import javafx.scene.layout.BorderPane;
import javafx.scene.control.TreeItem; import javafx.scene.layout.HBox;
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;
/** /**
* 设置窗口管理类实现了单例模式 * SetStage类表示设置窗口的单例对象此窗口用于显示不同的设置选项和其对应的布局
* * 通过调用getInstance方法获取SetStage的实例并使用openSetStage方法打开设置窗口
* <p>该类用于管理设置窗口的显示和内容</p>
*
* @author 许轲
*/ */
public class SetStage { public class SetStage extends Stage {
/** private static SetStage instance;
* 唯一的 SetStage 实例使用单例模式
*/
private static final SetStage SET_STAGE = new SetStage();
private StackPane contentDisplay; private StackPane contentDisplay;
/**
* 私有构造方法以实现单例模式
*/
private SetStage() { private SetStage() {
// 私有构造方法以实现单例模式
} }
/** /**
@ -34,69 +32,190 @@ public class SetStage {
* @return SetStage的实例 * @return SetStage的实例
*/ */
public static SetStage getInstance() { public static SetStage getInstance() {
return SET_STAGE; if (instance == null) {
instance = new SetStage();
}
return instance;
} }
/** /**
* 打开设置窗口 * 打开设置窗口显示不同的设置选项和对应的布局
*/ */
public void openSetStage() { public void openSetStage() {
// 创建一个用于显示内容的 StackPane并初始化为默认显示的标签 Stage primaryStage = new Stage();
contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); primaryStage.setTitle("设置窗口");
// 创建 TreeView并初始化设置项
TreeView<String> settingsTreeView = createTreeView();
// 创建一个分割面板左侧是设置树右侧是内容显示区域
SplitPane splitPane = new SplitPane(settingsTreeView, contentDisplay); contentDisplay = new StackPane();
// 设置分割位置
TreeView<String> treeView = createTreeView();
SplitPane splitPane = new SplitPane(treeView, contentDisplay);
splitPane.setDividerPositions(0.3); splitPane.setDividerPositions(0.3);
// 创建设置窗口的场景 HBox bottomBox= new HBox(10);
Scene scene = new Scene(splitPane, 800, 600); 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(); BorderPane root = new BorderPane();
setStage.setScene(scene); root.setCenter(splitPane);
setStage.setTitle("设置窗口"); root.setBottom(bottomBox);
setStage.getIcons().add(UiUtil.getAppIcon());
setStage.show(); Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
} }
/** /**
* 创建一个 TreeView 并初始化项 * 创建TreeView控件并设置其根节点包括设置项的层次结构
* *
* @return 初始化后的 TreeView * @return 创建的TreeView对象
*/ */
private TreeView<String> createTreeView() { private TreeView<String> createTreeView() {
TreeItem<String> rootItem = new TreeItem<>("设置"); TreeItem<String> root = new TreeItem<>("root");
rootItem.setExpanded(true); root.setExpanded(true);
//常规设置树
TreeItem<String> generalItem = new TreeItem<>("常规设置"); TreeItem<String> generalItem = new TreeItem<>("常规设置");
TreeItem<String> generalItem1 = new TreeItem<>("常规设置项1");
TreeItem<String> generalItem2 = new TreeItem<>("常规设置项2");
generalItem.getChildren().add(generalItem1);
generalItem.getChildren().add(generalItem2);
//外观设置树
TreeItem<String> appearanceItem = new TreeItem<>("外观设置"); TreeItem<String> appearanceItem = new TreeItem<>("外观设置");
TreeItem<String> appearanceItem1 = new TreeItem<>("外观设置项1");
TreeItem<String> appearanceItem2 = new TreeItem<>("外观设置项2");
appearanceItem.getChildren().add(appearanceItem1);
appearanceItem.getChildren().add(appearanceItem2);
//安全设置树
TreeItem<String> securityItem = new TreeItem<>("安全设置"); TreeItem<String> securityItem = new TreeItem<>("安全设置");
generalItem.getChildren().add(new TreeItem<>("常规设置项1")); TreeItem<String> securityItem1 = new TreeItem<>("安全设置项1");
generalItem.getChildren().add(new TreeItem<>("常规设置项2")); TreeItem<String> securityItem2 = new TreeItem<>("安全设置项2");
securityItem.getChildren().add(securityItem1);
securityItem.getChildren().add(securityItem2);
appearanceItem.getChildren().add(new TreeItem<>("外观设置项1")); root.getChildren().add(generalItem);
appearanceItem.getChildren().add(new TreeItem<>("外观设置项2")); root.getChildren().add(appearanceItem);
root.getChildren().add(securityItem);
TreeView<String> treeView = new TreeView<>(root);
treeView.setShowRoot(false);
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) -> { treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null) { if (newValue != null) {
// 更新内容显示区域为选定项的设置内容标签 String selectedItem = newValue.getValue();
contentDisplay.getChildren().setAll(new Label(newValue.getValue() + " 的设置内容")); Node selectedLayout = createLayoutForSelectedItem(selectedItem);
contentDisplay.getChildren().setAll(selectedLayout);
} }
}); });
return treeView; 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;
}
} }