From 15c122330b55161ccb66d7de8bc699607313e4f2 Mon Sep 17 00:00:00 2001 From: luckyblank Date: Sat, 15 Jan 2022 22:04:22 +0800 Subject: [PATCH] update --- README.md | 397 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 373 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index faeae6b..d7f749d 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,386 @@ # swing-demo -#### 介绍 -基于SwingSet2改造的Springboot项目 +#### 项目介绍: +> 基于**[beautyeye](https://gitee.com/jackjiang/beautyeye)**下的SwingSet2改造的Springboot项目 +> +> Created by LuckyBlank -#### 软件架构 -软件架构说明 +beautyeye是针对swing的美化包 +目前看了作者的3个项目,都是swingui中的佼佼者,符合个人的UI审美的。 -#### 安装教程 +唯一美中不足的项目采用原生的Java项目,只好印着头皮进行改造成maven项目。 -1. xxxx -2. xxxx -3. xxxx + 代码仓库: -#### 使用说明 +- SwingSet2/SwingSet3:https://gitee.com/jackjiang/beautyeye +- Swing9patch: **https://github.com/JackJiang2011/Swing9patch** -1. xxxx -2. xxxx -3. xxxx -#### 参与贡献 -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +#### 改造说明: +##### 1.创建标准的Springboot项目 -#### 特技 +(Springboot版本推荐2.5.6) -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +```xml + + org.springframework.boot + spring-boot-starter-parent + 2.5.6 + + +``` + +##### 2.创建目录 + +###### Java相关: + +​ 项目下创建lib目录用于放置beautyeye_lnf.jar:本地jar包。 + +​ 主启动类同级目录添加demos包:用于存放swingset2的java文件。 + +###### Resources相关: + +​ 项目resources文件夹下创建相关文件夹 + +​ language:用于存放国际化配置文件; + +​ static:静态资源文件 + +​ static/images:静态图片等资源 + +​ templates:存放html等视图文件 + +​ ... + +​ 将对应的资源文件复制到对应的文件夹中 + +###### 项目包结构: + +![image-20220115212133752](https://qny.luckyblank.cn/image-20220115212133752.png) + +##### 3.添加本地Jar包依赖 + +beautyeye_lnf.jar + +```xml + + + beautyeye_lnf + beautyeye_lnf + 3.7 + system + ${project.basedir}/lib/beautyeye_lnf.jar + + +``` + +##### 4.改造主启动类: + +(SwingUtilities.invokeLater(...)可自行百度,似乎是为了不影响主线程) + +```java +@SpringBootApplication +public class SwingDemoApplication { + + private static final Logger log = LoggerFactory.getLogger(SwingDemoApplication.class); + public static void main(String[] args) { + + + //读取配置文件的值来选择启动ui + try { + Properties loadProperties = PropertiesLoaderUtils + .loadProperties(new EncodedResource(new ClassPathResource("application.properties"), "UTF-8")); + + String guiType = loadProperties.getProperty("swing.ui.type"); + + //SwingUtilities.invokeLater的作用可以详细百度一下,我新手 + SwingUtilities.invokeLater(new Runnable() { + @SneakyThrows + @Override + public void run() { + log.info("正在启动GUI =======================>>> " + guiType ); + if("SwingSet2GUI".equals(guiType)){ + SwingSet2.main(args); + }else if("Swing9patchGUI".equals(guiType)){ + //TO-DO... + }else { + log.error("启动GUI异常 =======================>>> 请检查GUITYPE是否存在 "); + throw new RuntimeException("GUI类型出错:"+guiType); + } + + } + }); + } catch (IOException e) { + log.error("\n\t 启动GUI异常 >>>>>>>>>>>{},{}",e.getMessage(),e); + e.printStackTrace(); + } + + //spring + SpringApplication.run(SwingDemoApplication.class, args); + } + +} +``` + +##### 5.修正对应package包名 + +##### 6.修改类相关文件 + +​ a.Swingset2.java中的demo数组中的类路径(改成全路径)(涉及到的全改成全类名) + +```java + /** The demos. */ + String[] demos = { + "com.wuzf.swing.demos.ButtonDemo", + "com.wuzf.swing.demos.ColorChooserDemo", + "com.wuzf.swing.demos.ComboBoxDemo", + "com.wuzf.swing.demos.FileChooserDemo", + "com.wuzf.swing.demos.HtmlDemo", + "com.wuzf.swing.demos.ListDemo", + "com.wuzf.swing.demos.OptionPaneDemo", + "com.wuzf.swing.demos.ProgressBarDemo", + "com.wuzf.swing.demos.ScrollPaneDemo", + "com.wuzf.swing.demos.SliderDemo", + "com.wuzf.swing.demos.SplitPaneDemo", + "com.wuzf.swing.demos.TabbedPaneDemo", + "com.wuzf.swing.demos.TableDemo", + "com.wuzf.swing.demos.ToolTipDemo", + "com.wuzf.swing.demos.TreeDemo", + "com.wuzf.swing.demos.TextAreaDemo" + }; +``` + +​ b.修改获取国际化资源字符串的方式:只留下类名 + +```java + void loadDemo(String classname) { + String afterClassName = classname.substring(classname.lastIndexOf(".")+1); + setStatus(getString("Status.loading") + getString( afterClassName + ".name")); + DemoModule demo = null; + try { + Class demoClass = Class.forName(classname); + Constructor demoConstructor = demoClass.getConstructor(new Class[]{SwingSet2.class}); + demo = (DemoModule) demoConstructor.newInstance(new Object[]{this}); + addDemo(demo); + } catch (Exception e) { + System.out.println("Error occurred loading demo: " + classname); + } + } +``` + +c.修改静态图片文件地址:改成“/static/images” + +```java + public ImageIcon createImageIcon(String filename, String description) { + String path = "/static/images/" + filename; + return new ImageIcon(getClass().getResource(path)); + } +``` + +d.修改htmlDemo类中的path指向/templates/xxx.html + +```java + public HtmlDemo(SwingSet2 swingset) { + // Set the title for this demo, and an icon used to represent this + // demo inside the SwingSet2 app. + super(swingset, "HtmlDemo" + , "toolbar/JEditorPane.gif"); + + try { + URL url = null; + // System.getProperty("user.dir") + + // System.getProperty("file.separator"); + String path = null; + try { + path = "/templates/index.html"; + url = getClass().getResource(path); + } catch (Exception e) { + System.err.println("Failed to open " + path); + url = null; + } + + if(url != null) { + html = new JEditorPane(url); +// html.setEditable(false); + html.addHyperlinkListener(createHyperLinkListener()); + + JScrollPane scroller = new JScrollPane(); + JViewport vp = scroller.getViewport(); + vp.add(html); + getDemoPanel().add(scroller, BorderLayout.CENTER); + } + } catch (MalformedURLException e) { + System.out.println("Malformed URL: " + e); + } catch (IOException e) { + System.out.println("IOException: " + e); + } + } +``` + +e.修正templates/xxx.html中的图片资源应用地址 + +```html + + +Untitled Document + + + + +

 

+

+

+

 

+

 

+
+

Title Page

+

To The King

+

The Preface

+

Of the curious texture of Sea-weeds

+

Of an Ant or Pismire

+

Of a Louse
+
+
+

+

Images and text used by permission of Octavo + Corporation (www.octavo.com),
+
(c) 1999 Octavo Corporation. All + rights reserved.
+
+
+ Octavo Corporation is a publisher of rare + books and manuscripts with digital tools and formats through partnerships + with libraries, museums, and individuals. Using high-resolution digital imaging + technology, Octavo releases digital rare books on CD-ROM as Adobe PDF files + which can be viewed on and printed from almost any computing platform. You + can view each page and the binding on your computer screen, zoom in to view + detail up to 800% in some cases, and search, copy and paste the "live" text + placed invisibly behind the page images which is available for selected Editions. + Also included in each edition is the work's collation and provenance, as well + as commentary by a noted expert in its field.

+
+

 

+ + +``` + +f.修改DemoModule类中的获取指定前缀的国际化文件方式:getBundle("language.swingset") + +```JAVA + public String getString(String key) { + String value = "nada"; + if(bundle == null) { + if(getSwingSet2() != null) { + bundle = getSwingSet2().getResourceBundle(); + } else { + bundle = ResourceBundle.getBundle("language.swingset"); + } + } + try { + value = bundle.getString(key); + } catch (MissingResourceException e) { + System.out.println("java.util.MissingResourceException: Couldn't find value for: " + key); + } + return value; + } +``` + +##### 7.打包设置 + +修改pom.xml;设置主启动类,将本地lib/xxx.jar打进去 + +> 基于Springboot版本 +> +> spring-boot-starter-parent V2.5.6 +> +> 以下打包插件版本已经进过测试,推荐使用 +> +> maven-resources-plugin V3.1.0 +> +> maven-jar-plugin V3.0.2 + +```xml + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + org.projectlombok + lombok + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + + true + + com.wuzf.swing.SwingDemoApplication + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + +``` + +#### 使用说明: + +> 项目已经引用lombok +> +> IDEA、Eclipse需配置好对应的插件 + +开箱即用 + +#### 扩展说明: + +按需扩展功能: + +a.复制一份demo包下的任意xxxDemo的文件(例如:TextAreaDemo) + +b.在国际化配置文件中写入相关的信息swingset_zh_CN.properties + +```java +### DIY DEMO ### +TextAreaDemo.accessible_description=TextAreaDemo \u6f14\u793a +TextAreaDemo.name=TextAreaDemo \u6f14\u793a +TextAreaDemo.tooltip=TextAreaDemo \u6f14\u793a +``` + +c.在SwingSet2类文件的demos数组中添加刚刚创建的类的全类名 + +d.运行程序 + +![image-20220115220232814](https://qny.luckyblank.cn/image-20220115220232814.png)