diff --git a/src/main/java/org/jcnc/jnotepad/JnotepadApp.java b/src/main/java/org/jcnc/jnotepad/JnotepadApp.java index 170e258f78865585c818375637ca049a6384154d..88f5cc7af241613ab3c45cfb99b962b8f344fd86 100644 --- a/src/main/java/org/jcnc/jnotepad/JnotepadApp.java +++ b/src/main/java/org/jcnc/jnotepad/JnotepadApp.java @@ -26,12 +26,16 @@ public class JnotepadApp extends Application { } @Override - public void start(Stage primaryStage) { + public void init() { // 获取当前启动位置a String currentWorkingDirectory = System.getProperty("user.dir"); LogUtil.getLogger(this.getClass()).info("当前启动位置:{}", currentWorkingDirectory); // 设置参数 APPLICATION_MANAGER.setApplication(this); + } + + @Override + public void start(Stage primaryStage) { APPLICATION_MANAGER.setPrimaryStage(primaryStage); // 加载应用程序资源 APPLICATION_MANAGER.loadAppResources(); diff --git a/src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractBaseMenu.java b/src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractBaseMenu.java new file mode 100644 index 0000000000000000000000000000000000000000..39debbf895173ac32b4786b67ad54cb157c01a0d --- /dev/null +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractBaseMenu.java @@ -0,0 +1,65 @@ +package org.jcnc.jnotepad.api.core.views.menu; + +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import org.jcnc.jnotepad.app.i18n.UiResourceBundle; +import org.jcnc.jnotepad.controller.config.UserConfigController; +import org.jcnc.jnotepad.ui.views.root.top.menubar.TopMenuBar; + +import java.util.HashMap; +import java.util.Map; + +/** + * 抽象基础菜单类 + * + *

+ * 此抽象类用于创建基础菜单,包括菜单项的注册和初始化。 + *

+ * + * @author gewuyou + */ +public abstract class AbstractBaseMenu extends AbstractMenu { + protected final TopMenuBar topMenuBar = TopMenuBar.getInstance(); + protected final UserConfigController userConfigController = UserConfigController.getInstance(); + + /** + * 获取菜单名称 + * + * @return 菜单名称 + */ + public abstract String getMenuName(); + + /** + * 初始化菜单项 + * + * @param menuItems 菜单项集合 + * @param menu 菜单 + */ + @Override + protected void initMenuItems(Map menuItems, Menu menu) { + logger.info("初始化菜单项!"); + Map menuItemMap = new HashMap<>(16); + // 本地化 + menuItems.forEach((key, value) -> { + UiResourceBundle.bindStringProperty(value.textProperty(), key); + menuItemMap.put((String) value.getUserData(), value); + menu.getItems().add(value); + }); + userConfigController.getMenuItems().add(menuItemMap); + userConfigController.initShortcutKeys(menuItemMap); + } + + /** + * 初始化菜单栏 + */ + @Override + public void initMenu() { + registerMenu(); + logger.info("初始化菜单!"); + Menu menu = getMenu(); + // 菜单名称国际化 + UiResourceBundle.bindStringProperty(menu.textProperty(), getMenuName()); + // 初始化菜单项 + initMenuItems(getMenuItems(), menu); + } +} diff --git a/src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java b/src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractMenu.java similarity index 58% rename from src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java rename to src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractMenu.java index 54d9e585a074ec091aa9e852d4783fe93be979a8..1b2755e1d2902150156dae77193dd008a92a9a31 100644 --- a/src/main/java/org/jcnc/jnotepad/api/core/views/top/menu/AbstractTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/api/core/views/menu/AbstractMenu.java @@ -1,4 +1,4 @@ -package org.jcnc.jnotepad.api.core.views.top.menu; +package org.jcnc.jnotepad.api.core.views.menu; import javafx.beans.value.ChangeListener; import javafx.event.ActionEvent; @@ -7,40 +7,25 @@ import javafx.scene.control.CheckMenuItem; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.scene.control.RadioMenuItem; -import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.app.utils.LogUtil; -import org.jcnc.jnotepad.ui.views.root.top.menubar.TopMenuBar; import org.slf4j.Logger; import java.util.Map; /** - * 抽象顶部菜单类 - * - *

- * 此抽象类用于创建顶部菜单,包括菜单项的注册和初始化。 - *

+ * 抽象菜单类 * * @author gewuyou */ -public abstract class AbstractTopMenu { - protected final TopMenuBar topMenuBar = TopMenuBar.getInstance(); - +public abstract class AbstractMenu { protected Logger logger = LogUtil.getLogger(this.getClass()); - /** - * 获取菜单名称 - * - * @return 菜单名称 - */ - public abstract String getMenuName(); - /** * 获取菜单 * * @return 菜单 */ - public abstract Menu getMenu(); + public abstract T getMenu(); /** * 获取菜单项集合 @@ -50,9 +35,15 @@ public abstract class AbstractTopMenu { public abstract Map getMenuItems(); /** - * 注册顶部菜单 + * 注册菜单 + */ + protected abstract void registerMenu(); + + /** + * 初始化菜单 */ - protected abstract void registerTopMenu(); + protected abstract void initMenu(); + /** * 注册菜单项 @@ -68,6 +59,20 @@ public abstract class AbstractTopMenu { menuItem.setOnAction(eventHandler); } + /** + * 注册菜单项 + * + * @param menuItem 菜单项 + * @param menuItemName 菜单项名称 + * @param userData 用户数据,用来存放必要的数据,比如按钮菜单项名称 + * @param eventHandler 事件处理器 + */ + public void registerMenuItem(MenuItem menuItem, String menuItemName, Object userData, EventHandler eventHandler, boolean isDisable) { + if (!isDisable) { + registerMenuItem(menuItem, menuItemName, userData, eventHandler); + } + } + /** * 注册检查菜单项 * @@ -82,6 +87,32 @@ public abstract class AbstractTopMenu { checkMenuItem.selectedProperty().addListener(listener); } + /** + * 在给定菜单映射中注册具有指定名称、用户数据和事件处理程序的菜单项。 + * + * @param menu 菜单项映射 + * @param menuItemName 要注册的菜单项的名称 + * @param userData 与菜单项关联的用户数据 + */ + public void registerMenu(Menu menu, String menuItemName, Object userData) { + getMenuItems().put(menuItemName, menu); + menu.setUserData(userData); + } + + /** + * Registers a menu item in the specified menu with the given name and user data. + * + * @param menu the menu to register the item in + * @param menuItemName the name of the menu item + * @param userData the user data associated with the menu item + * @param isDisable whether the menu item is disabled + */ + public void registerMenu(Menu menu, String menuItemName, Object userData, boolean isDisable) { + if (!isDisable) { + registerMenu(menu, menuItemName, userData); + } + } + /** * 注册单选菜单项 * @@ -96,32 +127,12 @@ public abstract class AbstractTopMenu { radioMenuItem.setOnAction(eventHandler); } - /** - * 初始化菜单栏 - */ - public void initMenu() { - registerTopMenu(); - logger.info("初始化菜单!"); - Menu menu = getMenu(); - // 菜单名称国际化 - UiResourceBundle.bindStringProperty(menu.textProperty(), getMenuName()); - // 初始化菜单项 - initMenuItems(getMenuItems(), menu); - } - /** * 初始化菜单项 * * @param menuItems 菜单项集合 * @param menu 菜单 */ - private void initMenuItems(Map menuItems, Menu menu) { - logger.info("初始化菜单项!"); - var itemMap = topMenuBar.getAllItemMap(); - menuItems.forEach((key, value) -> { - UiResourceBundle.bindStringProperty(value.textProperty(), key); - itemMap.put((String) value.getUserData(), value); - menu.getItems().add(value); - }); - } + protected abstract void initMenuItems(Map menuItems, T menu); + } diff --git a/src/main/java/org/jcnc/jnotepad/app/utils/TabUtil.java b/src/main/java/org/jcnc/jnotepad/app/utils/TabUtil.java index d5307e03ed7c154e7fc129a3f17e28c277933177..e50fe5c690b3b7f65e4dc6d56cb7675b5b92c66a 100644 --- a/src/main/java/org/jcnc/jnotepad/app/utils/TabUtil.java +++ b/src/main/java/org/jcnc/jnotepad/app/utils/TabUtil.java @@ -19,7 +19,6 @@ import org.jcnc.jnotepad.ui.component.module.TextCodeArea; import org.jcnc.jnotepad.ui.component.stage.dialog.factory.impl.BasicFileChooserFactory; import org.jcnc.jnotepad.ui.views.manager.BottomStatusBoxManager; import org.jcnc.jnotepad.ui.views.manager.CenterTabPaneManager; -import org.jcnc.jnotepad.ui.views.manager.TopMenuBarManager; import org.jcnc.jnotepad.ui.views.root.center.main.center.tab.CenterTab; import org.jcnc.jnotepad.ui.views.root.center.main.center.tab.CenterTabPane; import org.slf4j.Logger; @@ -63,7 +62,7 @@ public class TabUtil { if (CONFIG_NAME.equals(tab.getText())) { // 重新加载语言包和快捷键 UserConfigController.getInstance().loadConfig(); - TopMenuBarManager.getInstance().initShortcutKeys(); + UserConfigController.getInstance().initAllShortcutKeys(); LocalizationController.initLocal(); logger.info("已刷新语言包!"); logger.info("已刷新快捷键!"); @@ -365,13 +364,9 @@ public class TabUtil { .addMenu( new MenuBuilder("复制") .addMenuItem("文件名", e -> { - ClipboardUtil.writeTextToClipboard(tab.getText()); + ClipboardUtil.writeTextToClipboard(file.getName()); NotificationUtil.infoNotification("已复制文件名!"); }, tab.isRelevance()) - .addMenuItem("标签页名", e -> { - ClipboardUtil.writeTextToClipboard(tab.getText()); - NotificationUtil.infoNotification("已复制标签页名!"); - }, !tab.isRelevance()) .addMenuItem("文件路径", e -> { ClipboardUtil.writeTextToClipboard(file.getAbsolutePath()); NotificationUtil.infoNotification("已复制文件路径!"); diff --git a/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java index 2d2b4bff4cb3a6503b83762963be86683e85ac57..3ae572588684603ec6c905ad8c19a68f5038b9cc 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java +++ b/src/main/java/org/jcnc/jnotepad/controller/config/UserConfigController.java @@ -1,12 +1,17 @@ package org.jcnc.jnotepad.controller.config; +import javafx.scene.control.MenuItem; +import javafx.scene.input.KeyCombination; import org.jcnc.jnotepad.api.core.controller.config.BaseConfigController; import org.jcnc.jnotepad.app.config.UserConfig; +import org.jcnc.jnotepad.app.utils.LogUtil; import org.jcnc.jnotepad.model.entity.ShortcutKey; +import org.slf4j.Logger; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import java.util.Map; import static org.jcnc.jnotepad.app.common.constants.AppConstants.PROGRAM_FILE_DIRECTORY; import static org.jcnc.jnotepad.app.common.constants.TextConstants.CHINESE; @@ -31,11 +36,16 @@ public class UserConfigController extends BaseConfigController { private static final UserConfigController INSTANCE = new UserConfigController(); private String configDir; + private final List> menuItems = new ArrayList<>(); + + Logger logger = LogUtil.getLogger(this.getClass()); + private UserConfigController() { configDir = Paths.get(AppConfigController.getInstance().getConfig().getRootPath(), PROGRAM_FILE_DIRECTORY, ROOT_CONFIG_DIR).toString(); loadConfig(); } + /** * 获取 UserConfigController 的实例。 * @@ -164,4 +174,35 @@ public class UserConfigController extends BaseConfigController { return getConfig().getShortcutKey(); } + public void initAllShortcutKeys() { + menuItems.forEach(this::initShortcutKeys); + } + + /** + * 初始化快捷键 + */ + public void initShortcutKeys(Map menuItemMap) { + List itemsToUnbind = new ArrayList<>(); + List shortcutKeyConfigs = getShortcutKey(); + for (ShortcutKey shortcutKey : shortcutKeyConfigs) { + // 保证json的key必须和变量名一致 + MenuItem menuItem = menuItemMap.get(shortcutKey.getButtonName()); + String shortKeyValue = shortcutKey.getShortcutKeyValue(); + if ("".equals(shortKeyValue) && menuItem != null) { + itemsToUnbind.add(menuItem); + continue; + } + if (menuItem != null) { + logger.info("功能名称:{}->快捷键:{}", menuItem.getText(), shortKeyValue); + // 动态添加快捷键 + menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); + } + } + // 解绑需要解绑的快捷键 + itemsToUnbind.forEach(menuItem -> menuItem.setAccelerator(null)); + } + + public List> getMenuItems() { + return menuItems; + } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/manager/TopMenuBarManager.java b/src/main/java/org/jcnc/jnotepad/ui/views/manager/TopMenuBarManager.java index 898e050b3f76032aec23dba869c5bc46bbfc69d9..707924cd618bdda2f0acd57c3964c11f4b097203 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/manager/TopMenuBarManager.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/manager/TopMenuBarManager.java @@ -3,12 +3,9 @@ package org.jcnc.jnotepad.ui.views.manager; import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.scene.control.Menu; -import javafx.scene.control.MenuItem; -import javafx.scene.input.KeyCombination; import org.jcnc.jnotepad.api.core.views.manager.AbstractManager; import org.jcnc.jnotepad.app.utils.LogUtil; import org.jcnc.jnotepad.controller.config.UserConfigController; -import org.jcnc.jnotepad.model.entity.ShortcutKey; import org.jcnc.jnotepad.ui.views.root.top.menubar.TopMenuBar; import org.jcnc.jnotepad.ui.views.root.top.menubar.menu.*; import org.slf4j.Logger; @@ -28,6 +25,7 @@ public class TopMenuBarManager extends AbstractManager { Logger logger = LogUtil.getLogger(this.getClass()); UserConfigController userConfigController = UserConfigController.getInstance(); + FileTopMenu fileTopMenu = FileTopMenu.getInstance(); LanguageTopMenu languageTopMenu = LanguageTopMenu.getInstance(); @@ -63,13 +61,12 @@ public class TopMenuBarManager extends AbstractManager { helpTopMenu.initMenu(); // 初始化插件菜单 pluginTopMenu.initMenu(); - + // 初始化运行菜单 runTopMenu.initMenu(); // 刷新顶部菜单栏 refreshTopMenuBar(); - // 初始化快捷键 - initShortcutKeys(); + } /** @@ -93,30 +90,6 @@ public class TopMenuBarManager extends AbstractManager { } - /** - * 初始化快捷键 - */ - public void initShortcutKeys() { - List itemsToUnbind = new ArrayList<>(); - List shortcutKeyConfigs = userConfigController.getShortcutKey(); - for (ShortcutKey shortcutKey : shortcutKeyConfigs) { - // 保证json的key必须和变量名一致 - MenuItem menuItem = topMenuBar.getAllItemMap().get(shortcutKey.getButtonName()); - String shortKeyValue = shortcutKey.getShortcutKeyValue(); - if ("".equals(shortKeyValue) && menuItem != null) { - itemsToUnbind.add(menuItem); - continue; - } - if (menuItem != null) { - logger.info("功能名称:{}->快捷键:{}", menuItem.getText(), shortKeyValue); - // 动态添加快捷键 - menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); - } - } - // 解绑需要解绑的快捷键 - itemsToUnbind.forEach(menuItem -> menuItem.setAccelerator(null)); - } - /** * 刷新顶部菜单 */ diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/TopMenuBar.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/TopMenuBar.java index ca594df162ea2f124f05a53ac137ae0e875fb3c3..acce617b1ef91c741e1ac9ddfa1d5f64a46e6b7d 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/TopMenuBar.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/TopMenuBar.java @@ -4,9 +4,6 @@ import javafx.scene.control.*; import org.jcnc.jnotepad.ui.views.manager.CenterTabPaneManager; import org.jcnc.jnotepad.ui.views.root.center.main.center.tab.CenterTab; -import java.util.HashMap; -import java.util.Map; - /** * 封装菜单栏组件。 * @@ -15,10 +12,6 @@ import java.util.Map; public class TopMenuBar extends MenuBar { private static final TopMenuBar MENU_BAR = new TopMenuBar(); - /** - * 按钮集合 - */ - private final Map allItemMap = new HashMap<>(); /** * 标签页布局组件封装。 */ @@ -153,8 +146,6 @@ public class TopMenuBar extends MenuBar { return helpMenu; } - - public Menu getPluginMenu() { return pluginMenu; } @@ -164,9 +155,6 @@ public class TopMenuBar extends MenuBar { return languageMenu; } - public Map getAllItemMap() { - return allItemMap; - } public MenuItem getNewItem() { return newItem; diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/FileTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/FileTopMenu.java index 0d290db952b7808af8ccb8d3a87986121f794e0d..3cc7d022743d0e1149251f3e351024c019c5cb6c 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/FileTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/FileTopMenu.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.ui.views.root.top.menubar.menu; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.controller.event.handler.menuitem.*; import org.jcnc.jnotepad.controller.event.handler.toolbar.OpenDirectory; @@ -16,7 +16,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.*; * * @author gewuyou */ -public class FileTopMenu extends AbstractTopMenu { +public class FileTopMenu extends AbstractBaseMenu { private static final FileTopMenu INSTANCE = new FileTopMenu(); private final Map fileMenuItems = new HashMap<>(); @@ -59,7 +59,7 @@ public class FileTopMenu extends AbstractTopMenu { * 注册顶部菜单 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { // 文件菜单 registerMenuItem(topMenuBar.getNewItem(), NEW, "newItem", new NewFile()); registerMenuItem(topMenuBar.getOpenItem(), OPEN, "openItem", new OpenFile()); diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/HelpTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/HelpTopMenu.java index 035f12907f7e81a2ecdfc544fe00f39683349d1f..cf6874236d600acac889817660cd4f16dfd66794 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/HelpTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/HelpTopMenu.java @@ -3,7 +3,7 @@ package org.jcnc.jnotepad.ui.views.root.top.menubar.menu; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.stage.Stage; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.ui.component.stage.topmenu.help.DeveloperDebugPaneStage; import org.jcnc.jnotepad.ui.component.stage.topmenu.help.HelpPaneStage; @@ -17,7 +17,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.*; * * @author gewuyou */ -public class HelpTopMenu extends AbstractTopMenu { +public class HelpTopMenu extends AbstractBaseMenu { private static final HelpTopMenu INSTANCE = new HelpTopMenu(); @@ -62,7 +62,7 @@ public class HelpTopMenu extends AbstractTopMenu { * 注册顶部菜单 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { registerMenuItem(topMenuBar.getAboutItem(), ABOUT, "aboutItem", event -> new HelpPaneStage().run(new Stage())); registerMenuItem(topMenuBar.getDeveloperItem(), DEVELOPER, "developerItem", event -> new DeveloperDebugPaneStage().run()); } diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/LanguageTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/LanguageTopMenu.java index 3fa2d47bd32bbf028cec6372a4f1fc825b4d2538..013695b52f5fc1c5de712b763525480bb42333f4 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/LanguageTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/LanguageTopMenu.java @@ -5,7 +5,7 @@ import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.ToggleGroup; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.app.i18n.UiResourceBundle; import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.controller.i18n.LocalizationController; @@ -22,7 +22,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.*; * * @author gewuyou */ -public class LanguageTopMenu extends AbstractTopMenu { +public class LanguageTopMenu extends AbstractBaseMenu { private static final LanguageTopMenu INSTANCE = new LanguageTopMenu(); @@ -69,14 +69,12 @@ public class LanguageTopMenu extends AbstractTopMenu { */ @Override public void initMenu() { - registerTopMenu(); + registerMenu(); logger.info("初始化语言菜单!"); // 语言菜单 ToggleGroup languageToggleGroup = new ToggleGroup(); - var itemMap = topMenuBar.getAllItemMap(); languageMenuItems.forEach((key, value) -> { UiResourceBundle.bindStringProperty(value.textProperty(), key); - itemMap.put(key, value); languageToggleGroup.getToggles().add(value); topMenuBar.getLanguageMenu().getItems().add(value); }); @@ -91,7 +89,7 @@ public class LanguageTopMenu extends AbstractTopMenu { * @apiNote 此方法 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { registerRadioMenuItem(languageMenuItems, topMenuBar.getChineseItem(), UPPER_CHINESE, Locale.CHINESE, this::toggleLanguage); registerRadioMenuItem(languageMenuItems, topMenuBar.getEnglishItem(), UPPER_ENGLISH, Locale.ENGLISH, this::toggleLanguage); } diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/PluginTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/PluginTopMenu.java index f3291bcd74b6ae6356d1469c7b0bb07842017ec2..def359884a20e7cde709f79846b55dca6e2ac5a9 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/PluginTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/PluginTopMenu.java @@ -2,7 +2,7 @@ package org.jcnc.jnotepad.ui.views.root.top.menubar.menu; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.ui.component.stage.topmenu.plugin.PluginManagementPane; import java.util.HashMap; @@ -15,7 +15,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.*; * * @author gewuyou */ -public class PluginTopMenu extends AbstractTopMenu { +public class PluginTopMenu extends AbstractBaseMenu { private static final PluginTopMenu INSTANCE = new PluginTopMenu(); @@ -60,7 +60,7 @@ public class PluginTopMenu extends AbstractTopMenu { * 注册顶部菜单 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { registerMenuItem(topMenuBar.getPluginManagerItem(), MANAGER_PLUGIN, "pluginManagerItem", event -> new PluginManagementPane().run()); registerMenuItem(topMenuBar.getCountItem(), STATISTICS, "countItem", event -> { }); diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/RunTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/RunTopMenu.java index fc69cf2e048b77363ea026ca290b150de6561aec..dc72198787239692e86087b8bc09d1ac9e4d1b10 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/RunTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/RunTopMenu.java @@ -4,7 +4,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.app.utils.LogUtil; import org.jcnc.jnotepad.ui.component.module.vbox.BuildPanel; import org.jcnc.jnotepad.ui.views.manager.BuildPanelManager; @@ -23,7 +23,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.RUN; * * @author gewuyou */ -public class RunTopMenu extends AbstractTopMenu { +public class RunTopMenu extends AbstractBaseMenu { private static final BuildPanelManager BUILD_PANEL_MANAGER = BuildPanelManager.getInstance(); private static final BuildPanel BUILD_PANEL = BuildPanel.getInstance(); private static final RunTopMenu INSTANCE = new RunTopMenu(); @@ -134,7 +134,7 @@ public class RunTopMenu extends AbstractTopMenu { * 注册顶部菜单 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { // 运行 registerMenuItem(topMenuBar.getRunItem(), RUN, "runItem", codeRun); diff --git a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/SettingTopMenu.java b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/SettingTopMenu.java index c7d7e5809ef36ce382b26465d75950831af41869..f02f1709940cf729f915ab0c980e27322f2618af 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/SettingTopMenu.java +++ b/src/main/java/org/jcnc/jnotepad/ui/views/root/top/menubar/menu/SettingTopMenu.java @@ -3,7 +3,7 @@ package org.jcnc.jnotepad.ui.views.root.top.menubar.menu; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.stage.Stage; -import org.jcnc.jnotepad.api.core.views.top.menu.AbstractTopMenu; +import org.jcnc.jnotepad.api.core.views.menu.AbstractBaseMenu; import org.jcnc.jnotepad.app.utils.UiUtil; import org.jcnc.jnotepad.controller.config.UserConfigController; import org.jcnc.jnotepad.controller.event.handler.menuitem.OpenConfig; @@ -19,7 +19,7 @@ import static org.jcnc.jnotepad.app.common.constants.TextConstants.*; * * @author gewuyou */ -public class SettingTopMenu extends AbstractTopMenu { +public class SettingTopMenu extends AbstractBaseMenu { private static final SettingTopMenu INSTANCE = new SettingTopMenu(); private final Map setMenuItems = new HashMap<>(); @@ -64,7 +64,7 @@ public class SettingTopMenu extends AbstractTopMenu { * @apiNote 此方法 */ @Override - protected void registerTopMenu() { + protected void registerMenu() { registerMenuItem(topMenuBar.getLineFeedItem(), WORD_WRAP, "lineFeedItem", (observableValue, before, after) -> { // 1. 更新全局配置 UserConfigController.getInstance().setAutoLineConfig(after); diff --git a/src/main/resources/jcnc/app/i18n/i18n.properties b/src/main/resources/jcnc/app/i18n/i18n.properties index 330f5de660dfe1e85bddca757f0f26dec744d499..d73e8d2ae62f85c8aff54dbe3a9bb26a2e95f893 100644 --- a/src/main/resources/jcnc/app/i18n/i18n.properties +++ b/src/main/resources/jcnc/app/i18n/i18n.properties @@ -28,3 +28,20 @@ MANAGER_PLUGIN=管理插件 ENCODE=编码 DE_BUG=调试 RUN=运行 +COPY=复制 +FILE_NAME=文件名 +FILE_PATH=文件路径 +FOLDER_PATH=所在文件夹 +EXPLORER=资源管理器 +CLOSE=关闭 +CLOSE_ALL_TABS=关闭所有标签页 +CLOSE_LEFT_TABS=关闭左侧标签页 +CLOSE_RIGHT_TABS=关闭右侧标签页 +CLOSE_OTHER_TABS=关闭其他标签页 +FIXED_TAB=固定标签页 +UNFIXED_TAB=取消固定 +READ_ONLY=只读 +UNREAD_ONLY=取消只读 +OPEN_ON=打开于 + +