完善设置页面

This commit is contained in:
许轲 2023-09-05 01:43:21 +08:00
parent 3da865f292
commit 635fec362a
5 changed files with 206 additions and 28 deletions

View File

@ -11,6 +11,7 @@ import org.jcnc.jnotepad.constants.AppConstants;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.manager.ThreadPoolManager;
import org.jcnc.jnotepad.tool.PopUpUtil;
import org.jcnc.jnotepad.tool.SingletonUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.view.manager.ViewManager;
@ -72,6 +73,8 @@ public class LunchApp extends Application {
primaryStage.setWidth(SCENE.getWidth());
primaryStage.setHeight(SCENE.getHeight());
primaryStage.getIcons().add(UiUtil.getAppIcon());
PopUpUtil.errorAlert("错误", "读写错误", "配置文件读写错误!", null, null);
primaryStage.show();
}

View File

@ -0,0 +1,13 @@
package org.jcnc.jnotepad.ui.module;
import javafx.scene.control.Button;
/**
* @author luke
*/
public class CustomSetButton extends Button {
public CustomSetButton(String text) {
// 设置按钮文本
setText(text);
}
}

View File

@ -0,0 +1,78 @@
package org.jcnc.jnotepad.ui.module;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Label;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
/**
* 设置组件类用于创建一个包含标签和按钮的垂直布局
*
* <p>
* 此组件可用于用户界面提供了设置标签文本按钮文本和按钮点击事件处理程序的方法
* </p>
*
* <p>
* 示例用法:
* <pre>{@code
* SettingsComponent settings = new SettingsComponent("标签文本", "按钮文本");
* settings.setButtonAction(event -> {
* // 处理按钮点击事件的逻辑
* });
* }</pre>
* </p>
*
* @author luke
* @since 1.0.0
*/
public class SettingsComponent extends VBox {
private final Label label;
private final Button button;
/**
* 创建一个设置组件实例
*
* @param labelText 标签文本
* @param buttonText 按钮文本
*/
public SettingsComponent(String labelText, String buttonText) {
setSpacing(10);
// 初始化标签
label = new Label(labelText);
// 创建按钮
button = new Button(buttonText);
// 将标签和按钮添加到垂直布局
getChildren().addAll(label, button);
}
/**
* 设置标签的文本
*
* @param text 新的标签文本
*/
public void setLabelText(String text) {
label.setText(text);
}
/**
* 设置按钮的文本
*
* @param text 新的按钮文本
*/
public void setButtonText(String text) {
button.setText(text);
}
/**
* 设置按钮的点击事件处理程序
*
* @param eventHandler 按钮点击事件处理程序
*/
public void setButtonAction(EventHandler<ActionEvent> eventHandler) {
button.setOnAction(eventHandler);
}
}

View File

@ -0,0 +1,60 @@
package org.jcnc.jnotepad.ui.setstage;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.jcnc.jnotepad.tool.PopUpUtil;
/**
* @author luke
*/
public class DeveloperDebugStage extends Stage {
public void start(Stage primaryStage) {
// 创建主舞台
primaryStage.setTitle("开发者调试页面");
// 创建一个垂直布局
VBox root = new VBox();
root.setPadding(new Insets(20));
root.setSpacing(10);
// 添加一些调试功能按钮和标签
Label titleLabel = new Label("开发者调试页面");
Button debugButton1 = new Button("错误提示框");
Button debugButton2 = new Button("调试功能2");
Button debugButton3 = new Button("调试功能3");
// 按钮点击事件处理
debugButton1.setOnAction(e -> {
// 在这里执行调试功能1的代码
System.out.println("开发者调试: " + debugButton1.getText() + " 启动!");
PopUpUtil.errorAlert("错误", "读写错误", "配置文件读写错误!", null, null);
});
debugButton2.setOnAction(e -> {
// 在这里执行调试功能2的代码
});
debugButton3.setOnAction(e -> {
// 在这里执行调试功能3的代码
});
// 将组件添加到布局中
root.getChildren().addAll(titleLabel, debugButton1, debugButton2, debugButton3);
// 创建场景
Scene scene = new Scene(root, 400, 300);
// 将场景添加到舞台
primaryStage.setScene(scene);
// 显示舞台
primaryStage.show();
}
}

View File

@ -1,5 +1,6 @@
package org.jcnc.jnotepad.ui.setstage;
import atlantafx.base.theme.Styles;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
@ -9,14 +10,29 @@ import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.module.CustomSetButton;
import org.jcnc.jnotepad.ui.module.SettingsComponent;
import static org.jcnc.jnotepad.constants.AppConstants.SCREEN_LENGTH;
import static org.jcnc.jnotepad.constants.AppConstants.SCREEN_WIDTH;
/**
* SetStage类表示设置窗口的单例对象此窗口用于显示不同的设置选项和其对应的布局
* 通过调用getInstance方法获取SetStage的实例并使用openSetStage方法打开设置窗口
*
* @author luke
*/
public class SetStage extends Stage {
public static final String GENERAL_SETTING_1 = "常规设置项1";
public static final String GENERAL_SETTING_2 = "常规设置项2";
public static final String APPEARANCE_SETTING_1 = "外观设置项1";
public static final String APPEARANCE_SETTING_2 = "外观设置项2";
public static final String SECURITY_SETTING_1 = "安全设置项1";
public static final String SECURITY_SETTING_2 = "安全设置项2";
private static SetStage instance;
private StackPane contentDisplay;
@ -46,7 +62,6 @@ public class SetStage extends Stage {
primaryStage.setTitle("设置窗口");
contentDisplay = new StackPane();
TreeView<String> treeView = createTreeView();
@ -57,10 +72,21 @@ public class SetStage extends Stage {
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));
bottomBox.setPadding(new Insets(5, 15, 5, 0));
Button confirmButton = new Button(" 确认 ");
Button cancelButton =new Button(" 取消 ");
confirmButton.setTextFill(Color.WHITE);
confirmButton.getStyleClass().addAll(Styles.SMALL);
confirmButton.setStyle("-fx-background-color: rgb(54,88,128);");
CustomSetButton cancelButton = new CustomSetButton(" 取消 ");
cancelButton.setOnAction(event -> {
Stage stage = (Stage) cancelButton.getScene().getWindow();
stage.close();
});
cancelButton.getStyleClass().addAll(Styles.SMALL);
Button applicationButton = new Button(" 应用 ");
applicationButton.getStyleClass().addAll(Styles.SMALL);
bottomBox.getChildren().addAll(confirmButton, cancelButton, applicationButton);
@ -68,7 +94,9 @@ public class SetStage extends Stage {
root.setCenter(splitPane);
root.setBottom(bottomBox);
Scene scene = new Scene(root, 800, 600);
Scene scene = new Scene(root, SCREEN_WIDTH - 100, SCREEN_LENGTH - 80);
primaryStage.getIcons().add(UiUtil.getAppIcon());
primaryStage.setScene(scene);
primaryStage.show();
@ -124,14 +152,15 @@ public class SetStage extends Stage {
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();
case GENERAL_SETTING_1 -> createGeneralSettingsLayout1();
case GENERAL_SETTING_2 -> createGeneralSettingsLayout2();
case APPEARANCE_SETTING_1 -> createAppearanceSettingsLayout1();
case APPEARANCE_SETTING_2 -> createAppearanceSettingsLayout2();
case SECURITY_SETTING_1 -> createSecuritySettingsLayout1();
case SECURITY_SETTING_2 -> createSecuritySettingsLayout2();
default -> null;
};
}
@ -142,23 +171,18 @@ public class SetStage extends Stage {
* @return 常规设置项1的布局节点
*/
private Node createGeneralSettingsLayout1() {
VBox generalLayout = new VBox();
VBox generalLayout = new VBox(10);
generalLayout.setPadding(new Insets(25));
// 添加一个Label作为设置项的标题
Label titleLabel = new Label("常规设置项1");
SettingsComponent devBox = new SettingsComponent("打开开发者调试页面","开发者调试页面");
devBox.setButtonAction(event -> {
// 创建并启动DeveloperDebugPage
DeveloperDebugStage debugPage = new DeveloperDebugStage();
debugPage.start(new Stage());
});
// 添加一个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);
generalLayout.getChildren().addAll(devBox);
return generalLayout;
}