Merge branch 'release-v1.1.12' of https://gitee.com/jcnc-org/JNotepad into develop

# Conflicts:
#	src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java
This commit is contained in:
gewuyou 2023-08-30 12:34:24 +08:00
commit 4db5107d81
2 changed files with 59 additions and 55 deletions

View File

@ -21,7 +21,7 @@ public class SetBtn implements EventHandler<ActionEvent> {
*/ */
@Override @Override
public void handle(ActionEvent event) { public void handle(ActionEvent event) {
SetStage.getInstance(); SetStage.getInstance().openSetStage();
} }

View File

@ -4,100 +4,104 @@ import javafx.scene.Scene;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.scene.control.SplitPane; import javafx.scene.control.SplitPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.jcnc.jnotepad.tool.UiUtil;
/** /**
* 设置窗口管理类实现了单例模式
*
* @author 许轲 * @author 许轲
*/ */
public class SetStage { public class SetStage {
// 唯一的 SetStage 实例使用单例模式
private static final SetStage SET_STAGE = new SetStage(); private static final SetStage SET_STAGE = new SetStage();
/**
* Declare contentDisplay as a class member
*/
private StackPane contentDisplay; private StackPane contentDisplay;
private ListView<String> generalListView;
private ListView<String> appearanceListView;
private ListView<String> securityListView;
/**
* 获取 SetStage 的唯一实例
*
* @return SetStage 的实例
*/
public static SetStage getInstance() { public static SetStage getInstance() {
return SET_STAGE; return SET_STAGE;
} }
private SetStage() { private SetStage() {
openSetStage(new Stage()); // 私有构造方法以实现单例模式
} }
public void openSetStage(Stage setStage) { /**
* 打开设置窗口
*/
public void openSetStage() {
// 创建一个用于显示内容的 StackPane并初始化为默认显示的标签
contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容"));
// 创建 TitledPane 组件 // 创建不同设置类别的 ListView并初始化设置项
TitledPane generalPane = new TitledPane("常规设置", createListView("常规设置项1", "常规设置项2")); generalListView = createListView("常规设置项1", "常规设置项2");
TitledPane appearancePane = new TitledPane("外观设置", createListView("外观设置项1", "外观设置项2")); appearanceListView = createListView("外观设置项1", "外观设置项2");
TitledPane securityPane = new TitledPane("安全设置", createListView("安全设置项1", "安全设置项2")); securityListView = createListView("安全设置项1", "安全设置项2");
generalPane.setOnMouseClicked(event -> { // 创建 TitledPanes每个面板包含一个标题和对应的设置列表
ListView<String> listView = (ListView<String>) generalPane.getContent(); TitledPane generalPane = new TitledPane("常规设置", generalListView);
if (listView.getSelectionModel().getSelectedItem() != null) { TitledPane appearancePane = new TitledPane("外观设置", appearanceListView);
contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); TitledPane securityPane = new TitledPane("安全设置", securityListView);
}
});
appearancePane.setOnMouseClicked(event -> { // TitledPanes 添加点击事件监听器用于更新内容显示区域
ListView<String> listView = (ListView<String>) appearancePane.getContent(); generalPane.setOnMouseClicked(event -> updateContentDisplay(generalListView));
if (listView.getSelectionModel().getSelectedItem() != null) { appearancePane.setOnMouseClicked(event -> updateContentDisplay(appearanceListView));
contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); securityPane.setOnMouseClicked(event -> updateContentDisplay(securityListView));
}
});
securityPane.setOnMouseClicked(event -> { // 创建一个垂直布局容器 TitledPanes 放入其中
ListView<String> listView = (ListView<String>) securityPane.getContent();
if (listView.getSelectionModel().getSelectedItem() != null) {
contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容"));
}
});
// 创建一个 VBox 来容纳 TitledPanes
VBox titledPaneContainer = new VBox(10); VBox titledPaneContainer = new VBox(10);
titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane); titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane);
// 创建一个占位符用于显示右侧内容区域 // 创建一个分割面板左侧是设置列表右侧是内容显示区域
StackPane stackPane = new StackPane(new Label("从左侧选择设置以显示内容")); SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay);
splitPane.setDividerPositions(0.3); // 设置分割位置
// 设置 TitledPanes 的点击事件监听器 // 创建设置窗口的场景
generalPane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("常规设置内容")));
appearancePane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("外观设置内容")));
securityPane.setOnMouseClicked(event -> stackPane.getChildren().setAll(new Label("安全设置内容")));
// 创建一个水平分割面板来容纳整个布局
SplitPane splitPane = new SplitPane(titledPaneContainer, stackPane);
// 设置分隔条位置
splitPane.setDividerPositions(0.3);
// 创建场景
Scene scene = new Scene(splitPane, 800, 600); Scene scene = new Scene(splitPane, 800, 600);
// 设置场景并显示窗口 // 创建设置窗口的 Stage并设置标题和场景
Stage setStage = new Stage();
setStage.setScene(scene); setStage.setScene(scene);
setStage.setTitle("设置窗口"); setStage.setTitle("设置窗口");
setStage.getIcons().add(UiUtil.getIcon());
setStage.show(); setStage.show();
} }
/**
* 创建一个 ListView 并初始化项
*
* @param items 要添加到 ListView 的项
* @return 初始化后的 ListView
*/
private ListView<String> createListView(String... items) { private ListView<String> createListView(String... items) {
ListView<String> listView = new ListView<>(); ListView<String> listView = new ListView<>();
listView.getItems().addAll(items); listView.getItems().addAll(items);
listView.setOnMouseClicked(event -> {
String selectedItem = listView.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容"));
}
});
return listView; return listView;
} }
/**
* 更新内容显示区域根据选定的列表项显示相应的设置内容
*
* @param listView 选定项所属的 ListView
*/
private void updateContentDisplay(ListView<String> listView) {
String selectedItem = listView.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
// 更新内容显示区域为选定项的设置内容标签
contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容"));
}
}
} }