完善设置页面
This commit is contained in:
parent
97c4863a32
commit
3da865f292
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
* 设置窗口管理类,实现了单例模式。
|
||||
*
|
||||
* <p>该类用于管理设置窗口的显示和内容。</p>
|
||||
*
|
||||
* @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("设置窗口");
|
||||
|
||||
// 创建 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);
|
||||
|
||||
// 创建设置窗口的场景
|
||||
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<String> createTreeView() {
|
||||
TreeItem<String> rootItem = new TreeItem<>("设置");
|
||||
rootItem.setExpanded(true);
|
||||
TreeItem<String> root = new TreeItem<>("root");
|
||||
root.setExpanded(true);
|
||||
|
||||
//常规设置树
|
||||
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> appearanceItem1 = new TreeItem<>("外观设置项1");
|
||||
TreeItem<String> appearanceItem2 = new TreeItem<>("外观设置项2");
|
||||
appearanceItem.getChildren().add(appearanceItem1);
|
||||
appearanceItem.getChildren().add(appearanceItem2);
|
||||
|
||||
//安全设置树
|
||||
TreeItem<String> securityItem = new TreeItem<>("安全设置");
|
||||
|
||||
generalItem.getChildren().add(new TreeItem<>("常规设置项1"));
|
||||
generalItem.getChildren().add(new TreeItem<>("常规设置项2"));
|
||||
TreeItem<String> securityItem1 = new TreeItem<>("安全设置项1");
|
||||
TreeItem<String> securityItem2 = new TreeItem<>("安全设置项2");
|
||||
securityItem.getChildren().add(securityItem1);
|
||||
securityItem.getChildren().add(securityItem2);
|
||||
|
||||
appearanceItem.getChildren().add(new TreeItem<>("外观设置项1"));
|
||||
appearanceItem.getChildren().add(new TreeItem<>("外观设置项2"));
|
||||
root.getChildren().add(generalItem);
|
||||
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) -> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user