diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 78fba9b..9d88868 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -16,7 +16,6 @@ module org.jcnc.jnotepad { exports org.jcnc.jnotepad; exports org.jcnc.jnotepad.tool; exports org.jcnc.jnotepad.Interface; - exports org.jcnc.jnotepad.controller.event.handler; exports org.jcnc.jnotepad.controller.manager; exports org.jcnc.jnotepad.view.manager; exports org.jcnc.jnotepad.constants; @@ -27,4 +26,6 @@ module org.jcnc.jnotepad { opens org.jcnc.jnotepad.app.config; exports org.jcnc.jnotepad.ui.module; exports org.jcnc.jnotepad.ui.root.top.tools; + exports org.jcnc.jnotepad.controller.event.handler.tool; + exports org.jcnc.jnotepad.controller.event.handler.menuBar; } \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java similarity index 96% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java index 66cacca..b4de320 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/NewFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/NewFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenConfig.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java similarity index 91% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenConfig.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java index e159683..ec2e9e5 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenConfig.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenConfig.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import org.jcnc.jnotepad.controller.config.AppConfigController; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java index cad3294..61d75db 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/OpenFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/OpenFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.application.Platform; import javafx.concurrent.Task; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java index 68a0ea6..e75e66f 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/RenameFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/RenameFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java similarity index 92% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java index 1d0af6f..426ded4 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveAsFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveAsFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import org.jcnc.jnotepad.tool.LogUtil; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java similarity index 98% rename from src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java rename to src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java index 62f77c9..64f0753 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.controller.event.handler; +package org.jcnc.jnotepad.controller.event.handler.menuBar; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java new file mode 100644 index 0000000..035b2f8 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/tool/SetBtn.java @@ -0,0 +1,38 @@ +package org.jcnc.jnotepad.controller.event.handler.tool; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; +import org.jcnc.jnotepad.app.i18n.UIResourceBundle; +import org.jcnc.jnotepad.constants.TextConstants; +import org.jcnc.jnotepad.tool.UiUtil; +import org.jcnc.jnotepad.ui.module.LineNumberTextArea; +import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.jcnc.jnotepad.ui.setStage.SetStage; +import org.jcnc.jnotepad.view.manager.ViewManager; + + +/** + * 设置按钮事件的事件处理程序。 + *

+ * 当用户点击设置的时候,将打开设置窗口。 + * + * @author 许轲 + */ +public class SetBtn implements EventHandler { + + /** + * 打开设置窗口处理事件 + * + * @param event 事件对象 + */ + @Override + public void handle(ActionEvent event) { + SetStage.getInstance(); + } + + +} \ No newline at end of file diff --git a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java index 332cf5d..e95f3a1 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java +++ b/src/main/java/org/jcnc/jnotepad/controller/manager/Controller.java @@ -1,8 +1,8 @@ package org.jcnc.jnotepad.controller.manager; import org.jcnc.jnotepad.Interface.ControllerAble; -import org.jcnc.jnotepad.controller.event.handler.NewFile; -import org.jcnc.jnotepad.controller.event.handler.OpenFile; +import org.jcnc.jnotepad.controller.event.handler.menuBar.NewFile; +import org.jcnc.jnotepad.controller.event.handler.menuBar.OpenFile; import java.io.File; import java.util.List; diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java index 999dea3..daf051e 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/menu/JNotepadMenuBar.java @@ -7,11 +7,13 @@ import javafx.stage.Stage; import org.jcnc.jnotepad.app.config.AppConfig; import org.jcnc.jnotepad.app.i18n.UIResourceBundle; import org.jcnc.jnotepad.controller.config.AppConfigController; -import org.jcnc.jnotepad.controller.event.handler.*; +import org.jcnc.jnotepad.controller.event.handler.menuBar.*; +import org.jcnc.jnotepad.controller.event.handler.tool.SetBtn; import org.jcnc.jnotepad.controller.i18n.LocalizationController; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTabPane; +import org.jcnc.jnotepad.ui.root.top.tools.JNotepadToolBar; import org.slf4j.Logger; import java.util.*; @@ -110,6 +112,14 @@ public class JNotepadMenuBar extends MenuBar { private RadioMenuItem englishItem; private final Map itemMap = new HashMap<>(); + /** + * 工具栏 + */ + JNotepadToolBar toolBar = JNotepadToolBar.getInstance(); + + // 获取工具栏中的setButton + Button setButton = toolBar.getSetButton(); + /** * 设置当前语言选中状态 * @@ -278,6 +288,7 @@ public class JNotepadMenuBar extends MenuBar { saveAsItem.setOnAction(new SaveAsFile()); openConfigItem.setOnAction(new OpenConfig()); renameItem.setOnAction(new RenameFile()); + setButton.setOnAction(new SetBtn()); lineFeedItem.selectedProperty().addListener((observableValue, before, after) -> { // 1. 更新全局配置 AppConfigController.getInstance().setAutoLineConfig(after); diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java index b843d84..4b1f2e2 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/JNotepadToolBar.java @@ -7,6 +7,9 @@ import javafx.scene.image.ImageView; public class JNotepadToolBar extends ToolBar { private static final JNotepadToolBar INSTANCE = new JNotepadToolBar(); + + Button setButton = new Button(); + private JNotepadToolBar() { // 创建工具栏上的按钮 Image image = new Image("tools.png"); // 替换为你的图片文件路径 @@ -16,7 +19,6 @@ public class JNotepadToolBar extends ToolBar { imageView.setScaleX(2.5); // 设置水平缩放比例 imageView.setScaleY(2.5); // 设置垂直缩放比例 // 设置缩放比例 - Button setButton = new Button(); setButton.setGraphic(imageView); // 将按钮添加到工具栏 @@ -24,6 +26,10 @@ public class JNotepadToolBar extends ToolBar { } + public Button getSetButton() { + return setButton; + } + public static JNotepadToolBar getInstance() { return INSTANCE; } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java index 5d162e1..d6ac4c4 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/top/tools/ToolHBox.java @@ -1,13 +1,13 @@ package org.jcnc.jnotepad.ui.root.top.tools; import javafx.geometry.Pos; +import javafx.scene.control.Button; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; public class ToolHBox extends HBox { private static final ToolHBox INSTANCE = new ToolHBox(); - private ToolHBox() { HBox.setHgrow(JNotepadToolBar.getInstance(), Priority.ALWAYS); // 设置子节点水平拉伸 @@ -19,4 +19,7 @@ public class ToolHBox extends HBox { return INSTANCE; } + + + } diff --git a/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java new file mode 100644 index 0000000..ca0d4f4 --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/ui/setStage/SetStage.java @@ -0,0 +1,96 @@ +package org.jcnc.jnotepad.ui.setStage; + +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + +public class SetStage { + + private static final SetStage SET_STAGE = new SetStage(); + private StackPane contentDisplay; // Declare contentDisplay as a class member + + public static SetStage getInstance() { + return SET_STAGE; + } + + private SetStage() { + openSetStage(new Stage()); + } + + public void openSetStage(Stage setStage) { + + contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); + + // 创建 TitledPane 组件 + TitledPane generalPane = new TitledPane("常规设置", createListView("常规设置项1", "常规设置项2")); + TitledPane appearancePane = new TitledPane("外观设置", createListView("外观设置项1", "外观设置项2")); + TitledPane securityPane = new TitledPane("安全设置", createListView("安全设置项1", "安全设置项2")); + + generalPane.setOnMouseClicked(event -> { + ListView listView = (ListView) generalPane.getContent(); + if (listView.getSelectionModel().getSelectedItem() != null) { + contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); + } + }); + + appearancePane.setOnMouseClicked(event -> { + ListView listView = (ListView) appearancePane.getContent(); + if (listView.getSelectionModel().getSelectedItem() != null) { + contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); + } + }); + + securityPane.setOnMouseClicked(event -> { + ListView listView = (ListView) securityPane.getContent(); + if (listView.getSelectionModel().getSelectedItem() != null) { + contentDisplay.getChildren().setAll(new Label(listView.getSelectionModel().getSelectedItem() + " 的设置内容")); + } + }); + + // 创建一个 VBox 来容纳 TitledPanes + VBox titledPaneContainer = new VBox(10); + titledPaneContainer.getChildren().addAll(generalPane, appearancePane, securityPane); + + // 创建一个占位符,用于显示右侧内容区域 + StackPane contentDisplay = new StackPane(new Label("从左侧选择设置以显示内容")); + + // 设置 TitledPanes 的点击事件监听器 + generalPane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("常规设置内容"))); + appearancePane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("外观设置内容"))); + securityPane.setOnMouseClicked(event -> contentDisplay.getChildren().setAll(new Label("安全设置内容"))); + + // 创建一个水平分割面板来容纳整个布局 + SplitPane splitPane = new SplitPane(titledPaneContainer, contentDisplay); + splitPane.setDividerPositions(0.3); // 设置分隔条位置 + + // 创建场景 + Scene scene = new Scene(splitPane, 800, 600); + + // 设置场景并显示窗口 + setStage.setScene(scene); + setStage.setTitle("设置窗口"); + setStage.show(); + } + + private ListView createListView(String... items) { + ListView listView = new ListView<>(); + listView.getItems().addAll(items); + + listView.setOnMouseClicked(event -> { + String selectedItem = listView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + contentDisplay.getChildren().setAll(new Label(selectedItem + " 的设置内容")); + } + }); + + return listView; + } + + + +}