!49 添加使用系统文件选择器时显示应用图标

Merge pull request !49 from 格物方能致知/feature-17WSJY
This commit is contained in:
Luke 2023-08-29 06:39:45 +00:00 committed by Gitee
commit eb785eec45
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
15 changed files with 133 additions and 36 deletions

View File

@ -13,8 +13,6 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.9.2</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>io.github.mkpaz</groupId>

View File

@ -22,5 +22,8 @@ module org.jcnc.jnotepad {
exports org.jcnc.jnotepad.constants;
exports org.jcnc.jnotepad.ui;
exports org.jcnc.jnotepad.controller.i18n;
exports org.jcnc.jnotepad.ui.tab;
exports org.jcnc.jnotepad.ui.status;
exports org.jcnc.jnotepad.ui.menu;
opens org.jcnc.jnotepad.app.config;
}

View File

@ -1,8 +1,5 @@
package org.jcnc.jnotepad.Interface;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import java.io.File;
import java.util.List;
/**

View File

@ -42,9 +42,7 @@ public class LunchApp extends Application {
scene = new Scene(root, width, length);
Application.setUserAgentStylesheet(new PrimerLight().getUserAgentStylesheet());
scene.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/styles.css")).toExternalForm());
initUIComponents();
initUiComponents();
UIResourceBundle.bindStringProperty(primaryStage.titleProperty(), TextConstants.TITLE);
primaryStage.setWidth(width);
primaryStage.setHeight(length);
@ -53,7 +51,7 @@ public class LunchApp extends Application {
primaryStage.show();
}
private void initUIComponents() {
private void initUiComponents() {
//1. 加载语言
LocalizationController.initLocal();

View File

@ -15,6 +15,11 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
/**
* 应用程序配置控制器
*
* @author songdragon
*/
public class AppConfigController {
private static final Logger logger = LogUtil.getLogger(AppConfigController.class);
@ -104,7 +109,7 @@ public class AppConfigController {
/**
* 获取当前配置文件所在目录
*
* @return
* @return 所在目录
*/
public String getDir() {
return dir;

View File

@ -4,8 +4,8 @@ import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import org.jcnc.jnotepad.app.i18n.UIResourceBundle;
import org.jcnc.jnotepad.constants.TextConstants;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
import org.jcnc.jnotepad.view.manager.ViewManager;
@ -37,13 +37,13 @@ public class NewFile implements EventHandler<ActionEvent> {
// 设置当前标签页与本地文件无关联
textArea.setRelevance(false);
// TODO: refactor统一TextArea新建绑定监听器入口
ViewManager viewManager = ViewManager.getInstance();
ViewManager viewManager = UiUtil.getViewManager();
// 将Tab页添加到TabPane中
JNotepadTabPane.getInstance().addNewTab(new JNotepadTab(UIResourceBundle.getContent(TextConstants.NEW_FILE)
+ viewManager.selfIncreaseAndGetTabIndex(),
textArea));
// 更新编码信息
JNotepadStatusBox.getInstance().updateEncodingLabel();
UiUtil.getStatusBox().updateEncodingLabel();
}
}

View File

@ -8,6 +8,7 @@ import javafx.stage.FileChooser;
import org.jcnc.jnotepad.manager.ThreadPoolManager;
import org.jcnc.jnotepad.tool.EncodingDetector;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
@ -36,11 +37,10 @@ public class OpenFile implements EventHandler<ActionEvent> {
*/
@Override
public void handle(ActionEvent event) {
// 创建文件选择器
FileChooser fileChooser = new FileChooser();
// 显示文件选择对话框并获取选中的文件
File file = fileChooser.showOpenDialog(null);
File file = fileChooser.showOpenDialog(UiUtil.getAppWindow());
if (file != null) {
openFile(file);
}

View File

@ -6,10 +6,9 @@ import javafx.stage.FileChooser;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.tool.UiUtil;
import org.jcnc.jnotepad.ui.LineNumberTextArea;
import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
import org.slf4j.Logger;
import java.io.File;
@ -33,7 +32,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent actionEvent) {
// 获取当前tab页
JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
JNotepadTab selectedTab = UiUtil.getJnotepadtab();
if (selectedTab == null) {
return;
}
@ -51,7 +50,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
if (CONFIG_NAME.equals(selectedTab.getText())) {
// 重新加载语言包和快捷键
AppConfigController.getInstance().loadConfig();
JNotepadMenuBar.getMenuBar().initShortcutKeys();
UiUtil.getMenuBar().initShortcutKeys();
LocalizationController.initLocal();
logger.info("已刷新语言包!");
logger.info("已刷新快捷键!");
@ -67,7 +66,7 @@ public class SaveFile implements EventHandler<ActionEvent> {
* @see LogUtil
*/
protected void saveTab(Class<?> currentClass) {
JNotepadTab selectedTab = JNotepadTabPane.getInstance().getSelected();
JNotepadTab selectedTab = UiUtil.getJnotepadtab();
if (selectedTab != null) {
// 创建一个文件窗口
FileChooser fileChooser = new FileChooser();
@ -75,7 +74,8 @@ public class SaveFile implements EventHandler<ActionEvent> {
fileChooser.setInitialFileName(selectedTab.getText());
// 设置保存文件类型
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("文本文档", "*.txt"));
File file = fileChooser.showSaveDialog(null);
// 获取应用窗口并绑定
File file = fileChooser.showSaveDialog(UiUtil.getAppWindow());
if (file != null) {
LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName());
selectedTab.save();

View File

@ -13,8 +13,8 @@ import static org.jcnc.jnotepad.constants.TextConstants.CHINESE;
import static org.jcnc.jnotepad.constants.TextConstants.ENGLISH;
/**
* 本地化配置文件<br>
* 注意该配置文件必须先于快捷键配置文件加载
* 本地化控制器<br>
* 注意本地化配置加载应当优先于快捷键配置加载
*
* @author gewuyou
* @see LunchApp

View File

@ -1,7 +1,6 @@
package org.jcnc.jnotepad.tool;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.PrettyPrinter;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;

View File

@ -0,0 +1,102 @@
package org.jcnc.jnotepad.tool;
import javafx.stage.Window;
import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;
import org.jcnc.jnotepad.view.manager.ViewManager;
/**
* UI工具<br>
* 封装了项目所有的UI组件以减少组件单例模式造成代码的复杂性
*
* @author gewuyou
*/
public class UiUtil {
private UiUtil() {
}
/**
* 标签页布局组件
*/
private static final JNotepadTabPane TAB_PANE = JNotepadTabPane.getInstance();
/**
* 视图管理组件
*/
private static final ViewManager VIEW_MANAGER = ViewManager.getInstance();
/**
* 状态栏组件
*/
private static final JNotepadStatusBox STATUS_BOX = JNotepadStatusBox.getInstance();
/**
* 菜单栏组件
*/
private static final JNotepadMenuBar MENU_BAR = JNotepadMenuBar.getMenuBar();
/**
* 获取标签页布局组件
*
* @return org.jcnc.jnotepad.ui.tab.JNotepadTabPane
* @apiNote JNotepadTabPane.getInstance()
* @see JNotepadTabPane
*/
public static JNotepadTabPane getJnotepadTabPane() {
return TAB_PANE;
}
/**
* 获取标签页组件
*
* @return org.jcnc.jnotepad.ui.tab.JNotepadTab
* @apiNote JNotepadTabPane.getInstance().getSelected()<br>获取当前选中的标签页
* @see JNotepadTabPane
*/
public static JNotepadTab getJnotepadtab() {
return TAB_PANE.getSelected();
}
/**
* 获取应用窗口
*
* @return javafx.stage.Window
* @apiNote JNotepadTabPane.getInstance().getSelected().getTabPane().getScene().getWindow()
* @since 2023/8/29 14:12
*/
public static Window getAppWindow() {
return TAB_PANE.getSelected().getTabPane().getScene().getWindow();
}
/**
* 获取视图管理组件
*
* @return org.jcnc.jnotepad.view.manager.ViewManager
* @apiNote ViewManager.getInstance()
* @since 2023/8/29 14:13
*/
public static ViewManager getViewManager() {
return VIEW_MANAGER;
}
/**
* 获取状态栏组件
*
* @return org.jcnc.jnotepad.ui.status.JNotepadStatusBox
* @since 2023/8/29 14:14
*/
public static JNotepadStatusBox getStatusBox() {
return STATUS_BOX;
}
/**
* 获取菜单栏组件
*
* @return org.jcnc.jnotepad.ui.menu.JNotepadMenuBar
* @since 2023/8/29 14:15
*/
public static JNotepadMenuBar getMenuBar() {
return MENU_BAR;
}
}

View File

@ -3,10 +3,8 @@ package org.jcnc.jnotepad.ui;
import javafx.beans.property.StringProperty;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import org.jcnc.jnotepad.app.config.AppConfig;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.tool.LogUtil;
import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
import org.jcnc.jnotepad.ui.tab.JNotepadTab;
import org.jcnc.jnotepad.ui.tab.JNotepadTabPane;

View File

@ -145,11 +145,8 @@ public class JNotepadMenuBar extends MenuBar {
for (AppConfig.ShortcutKey shortcutKey : shortcutKeyConfigs) {
// 保证json的key必须和变量名一致
MenuItem menuItem = this.itemMap.get(shortcutKey.getButtonName());
if (Objects.isNull(menuItem)) {
continue;
}
String shortKeyValue = shortcutKey.getShortcutKeyValue();
if ("".equals(shortKeyValue)) {
if (Objects.isNull(menuItem) || "".equals(shortKeyValue)) {
continue;
}
logger.info("功能名称:{}->快捷键:{}", menuItem.getText(), shortKeyValue);
@ -290,6 +287,7 @@ public class JNotepadMenuBar extends MenuBar {
/**
* 切换语言
*
* @param actionEvent 点击事件
*/
private void toggleLanguage(ActionEvent actionEvent) {

View File

@ -2,8 +2,7 @@ package org.jcnc.jnotepad.ui.tab;
import javafx.scene.control.TabPane;
import org.jcnc.jnotepad.controller.config.AppConfigController;
import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar;
import org.jcnc.jnotepad.ui.status.JNotepadStatusBox;
import org.jcnc.jnotepad.tool.UiUtil;
/**
* 标签页布局组件封装
@ -27,10 +26,10 @@ public class JNotepadTabPane extends TabPane {
(ov, from, to) -> {
if (to != null) {
// 更新菜单栏中与tab相关设置
JNotepadMenuBar.getMenuBar().updateMenuStatusBySelectedTab();
UiUtil.getMenuBar().updateMenuStatusBySelectedTab();
}
// 更新状态标签
JNotepadStatusBox.getInstance().updateWhenTabSelected();
UiUtil.getStatusBox().updateWhenTabSelected();
}
);
}
@ -69,6 +68,6 @@ public class JNotepadTabPane extends TabPane {
public void fireTabSelected() {
JNotepadTab selectedTab = getSelected();
selectedTab.setAutoLine(AppConfigController.getInstance().getAutoLineConfig());
JNotepadStatusBox.getInstance().updateWhenTabSelected();
UiUtil.getStatusBox().updateWhenTabSelected();
}
}

View File

@ -10,7 +10,7 @@
<property name="log.maxHistory" value="30"/>
<!-- 日志存储路径 -->
<property name="log.filePath" value="logs"/>
<!--发布0时,请使用下方的路径-->
<!--发布时,请使用下方的路径-->
<!--<property name="log.filePath" value="${user.home}/.jnotepad/logs"/>-->
<!-- 日志的显式格式 -->
<property name="log.pattern"