记一次糟糕的开发经历(文本匹配器)--swing框架使用

Sophia ·
更新时间:2024-11-14
· 716 次阅读

记一次糟糕的开发经历[文本匹配器]--swing框架使用一.前言1.写在前面2.实现目标及效果图A.实现目标B.效果图二.Swing框架和POI介绍1.Swing框架介绍1.什么是Swing?2.Swing中的容器介绍3.一些容器与按钮的写法2.POI介绍1.什么是POI2.基本功能3.基本用法(Word&Excel)1.操作Excel文档2.操作Word文档三.文本适配器开发1.画窗口2.写监听方法3.处理文件四.依赖打入jar包1. 打包前的准备工作1. 配置pom.xml2. 在项目文件夹下新建assembly/release.xml文件2. 使用==mvn package assembly:single==命令进行打包1. 进入项目文件夹下2.执行mvn package assembly:single命令3.检查项目下的target文件夹五.jar包处理成可执行文件(.exe文件)1.准备工作2.将jar包处理成可执行文件六.结束语 一.前言 1.写在前面

    笔者最近因为公司里的一些~~开心事(糟心事还差不多)~~裸辞在家,一方面想换个工作环境。换换心情.另一方面也想找段时间好好沉淀一下自己。因此步入了失业人群,没事的时候在家看看书撸撸代码过得也还行。今天在整理自己工作笔记的时候发现找代码段真的好麻烦,每次都要打开文件一点一点看,因此就萌生了一个想法就是自己写一个文本匹配器。
    为什么说是糟糕的开发经历呢?一方面是因为工作,当然这不是重要的事情。最重要的是因为长时间从事web开发Swing框架几乎已经忘完了,所以才造就了这次磕磕绊绊的糟糕开发经历。

2.实现目标及效果图 A.实现目标

实现目标: 给定一段文本,选择若干个文件,点击搜索显示文件信息和搜索结果。

B.效果图

    由于是笔者为了方便自己偷懒而开发的软件,所以界面并不好看,刚好我对这些地方也并不怎么在意,所以就凑合着用吧。界面效果图如1.2.1所示,运行效果图如1.2.2和1.2.3所示。
图1.2.a

图1.2.1
选择文件后的效果图图1.2.2
点击搜索后的效果图图1.2.3

    看完了这些吐槽的话,下面开始我们的开发之旅。当然在开发之前首先要了解一些知识点。这次的开发主要涉及以下知识:

知识点 作用
Swing框架 用于搭建项目界面
POI 用来操作Word、Excel等文档当然这里只涉及读取
File类 用于操作文件
IO流 用来对文档内容进行读写,比如BufferWriter、BufferReader等
二.Swing框架和POI介绍 1.Swing框架介绍 1.什么是Swing?

    Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
    Swing 围绕 JComponent 组件构建,JComponent 则由 AWT 的容器类扩展而来。Swing 组织结构如图 2.1.1 所示。
Swing 组织结构图

图 2.1.1 2.Swing中的容器介绍

   Swing 中容器可以分为两类:顶层容器和中间容器。

顶层容器
   顶层容器是进行图形编程的基础,一切图形化的东西都必须包括在顶层容器中。顶层容器是任何图形界面程序都要涉及的主窗口,是显示并承载组件的容器组件。
种类 介绍
JFrame 用于框架窗口的类,此窗口带有边框、标题、关闭和最小化窗口的图标。带 GUI 的应用程序至少使用一个框架窗口
JDialog 用于对话框的类,主要用于弹出各种对话框
JApplet 用于使用 Swing 组件的 Java Applet 类,主要用于在浏览器内显示一个小程序界面
中间容器
   中间容器是容器组件的一种,也可以承载其他组件,但中间容器不能独立显示,必须依附于其他的顶层容器。
种类 介绍
JPanel 表示一个普通面板,是最灵活、最常用的中间容器
JScrollPane 与 JPanel 类似,但它可在大的组件或可扩展组件周围提供滚动条
JTabbedPane 表示选项卡面板,可以包含多个组件,但一次只显示一个组件,用户可在组件之间方便地切换
JToolBar 表示工具栏,按行或列排列一组组件(通常是按钮)
3.一些容器与按钮的写法

   在这个项目中用到的顶层容器:JFrameJDialog,中间容器有JPanelJScrollPaneJTabbedPane,下面简单看下这几个容器的用法:

// 创建顶层容器 JFrame JFrame frame = new JFrame("文本匹配器"); // 设置窗口不可自由变换大小 frame.setResizable(false); // 设置窗口大小 frame.setSize(600,500); // 设置窗口相对于指定组件的位置--null表示窗口位于屏幕中央 frame.setLocationRelativeTo(null); // 设置窗口左上角图标(默认是Java的咖啡图标) ImageIcon imageIcon = new ImageIcon("src/main/java/matching.jpg"); frame.setIconImage(imageIcon.getImage()); // 窗口关闭按钮 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 设置窗口、控件可见性 frame.setVisible(true); //效果图如图2.1.2所示

创建顶层容器

图 2.1.2 // 创建对话框 JDialog //初始化文件选择框 JFileChooser fDialog = new JFileChooser(); //设置文件选择框的标题 fDialog.setDialogTitle("请选择文件"); //设置文件多选 fDialog.setMultiSelectionEnabled(true); //弹出选择框 int returnVal = fDialog.showOpenDialog(null); //效果图如图2.1.3所示

文件选择框

图 2.1.3 // 创建普通面板 JPanel //创建一个JFrame对象 JFrame jf=new JFrame("Java第二个GUI程序"); //设置窗口大小和位置 jf.setBounds(300, 100, 400, 200); //创建一个JPanel对象 JPanel jp=new JPanel(); //创建一个标签 JLabel jl=new JLabel("这是放在JPanel上的标签"); //设置背景色 jp.setBackground(Color.white); //将标签添加到面板 jp.add(jl); //将面板添加到窗口 jf.add(jp); //设置窗口可见 jf.setVisible(true); //效果图如图2.1.4所示

JPanel效果图

图 2.1.4 // 创建可滚动面板 // 创建文本域(图中亮白色部分) JTextArea target = new JTextArea(10,50); // 初始化可滚动面板 JScrollPane scrollPane_top=new JScrollPane(); // 将文本域添加到可滚动面板中 scrollPane_top.setViewportView(target); //效果图如图2.1.5所示(被黑色矩形选中的部分)

可滚动面板

图 2.1.5 // 创建选项卡面板 // 创建文本域 JTextArea target = new JTextArea(10,50); // 初始化选项卡面板 JTabbedPane tabbedPane_top = new JTabbedPane(); // 初始化可滚动面板 JScrollPane scrollPane_top=new JScrollPane(); // 将可滚动面板添加到选项卡面板中 tabbedPane_top.addTab("目标文本",null,scrollPane_top,null); // 将文本域添加到可滚动面板中 scrollPane_top.setViewportView(target); // 从这里可以看出中间层容器可以承载其他组件(中间层容器也是组件,即容器组件) //效果图如图2.1.6所示(被红色矩形选中的部分)

选项卡面板

图 2.1.6 Swing中的控件介绍
   常用的控件有按钮,文本域,文本框,单选框,复选框等等。每个控件可以添加相应的监听事件(对比HTML页面)对以一些操作(如:点击,得到焦点,失去焦点等)进行响应,这里以按钮(JButton)为例介绍其创建及绑定事件。 // 创建一个右对齐布局的普通面板 JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建一个叫“选择文件”的按钮 JButton chooseFile = new JButton("选择文件"); // 为按钮添加事件监听 chooseFile.addActionListener(new ActionListener() { // 当按钮被点击是执行chooseFile()方法 @Override public void actionPerformed(ActionEvent e) { chooseFile(addressArea); } }); // 将按钮添加到普通面板是 panel.add(chooseFile,BorderLayout.NORTH);

当然,这里只是举个栗子,并不代表按钮只有点击事件。其他的一些事件在项目中用到就会讲解,如果没用到并且你真的想知道的话,建议点击xietansheng的博客(博主真的很走心)或者点击C语言中文网来学习更多的Swing相关知识。

2.POI介绍 1.什么是POI

   POI全称是Apache POI(点击查看官方文档)或Java POI。是Apache基金会的开源函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

2.基本功能 POIFS : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。 HSSF : 它被用来读取和写入MS-Excel的xls扩展名的文件。 XSSF : 它是用于MS-Excel的xlsx扩展名的文件。 HPSF : 它用来提取MS-Office文件属性设置。 HWPF : 它是用来读取和写入MS-Word的doc扩展名的文件。 XWPF : 它是用来读取和写入MS-Word的docx扩展名的文件。 HSLF : 它是用于读取,创建和编辑PowerPoint演示文稿。 HDGF : 它包含类和方法为MS-Visio的二进制文件。 HPBF : 它被用来读取和写入MS-Publisher文件。 3.基本用法(Word&Excel) 1.操作Excel文档

   这部分代码摘抄自百度百科POI (Apache POI),代码很简单,跑一遍就能弄懂。

创建Excel文档 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileOutputStream; public class CreateXL { /** Excel 文件要存放的位置,假定在D盘下*/ public static String outputFile = "D:\\test.xls"; public static void main(String argv[]) { try { // 创建新的Excel 工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值 // 如要新建一名为"效益指标"的工作表,其语句为: // HSSFSheet sheet = workbook.createSheet("效益指标"); HSSFSheet sheet = workbook.createSheet(); // 在索引0的位置创建行(最顶端的行) HSSFRow row = sheet.createRow((short)0); //在索引0的位置创建单元格(左上端) HSSFCell cell = row.createCell((short)0); // 定义单元格为字符串类型 cell.setCellType(HSSFCell.CELL_TYPE_STRING);//已过时 // 在单元格中输入一些内容 cell.setCellValue("增加值"); // 新建一输出文件流 FileOutputStream fOut = new FileOutputStream(outputFile); // 把相应的Excel 工作簿存盘 workbook.write(fOut); fOut.flush(); // 操作结束,关闭文件 fOut.close(); System.out.println("文件生成..."); } catch (Exception e) { System.out.println("已运行 xlCreate() : " + e); } } } 读取Excel文档 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileInputStream; public class ReadXL { /** Excel文件的存放位置。注意是反斜线*/ public static String fileToBeRead = "D:\\test1.xls"; public static void main(String argv[]) { try { // 创建对Excel工作簿文件的引用 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead)); // 创建对工作表的引用。 // 本例是按名引用(让我们假定那张表有着缺省名"Sheet1") HSSFSheet sheet = workbook.getSheet("Sheet1"); // 也可用getSheetAt(int index)按索引引用, // 在Excel文档中,第一张工作表的缺省索引是0, // 其语句为:HSSFSheet sheet = workbook.getSheetAt(0); // 读取左上端单元 HSSFRow row = sheet.getRow(0); HSSFCell cell = row.getCell((short)0); // 输出单元内容,cell.getStringCellValue()就是取所在单元的值 System.out.println("左上端单元是: " + cell.getStringCellValue()); } catch (Exception e) { System.out.println("已运行xlRead() : " + e); } } } 2.操作Word文档 创建Word文档 // 创建Word文件 XWPFDocument doc = new XWPFDocument(); // 新建一个段落 XWPFParagraph p = doc.createParagraph(); // 设置段落的对齐方式 p.setAlignment(ParagraphAlignment.CENTER); //设置下边框 p.setBorderBottom(Borders.DOUBLE); //设置上边框 p.setBorderTop(Borders.DOUBLE); //设置右边框 p.setBorderRight(Borders.DOUBLE); //设置左边框 p.setBorderLeft(Borders.DOUBLE); //创建段落文本 XWPFRun r = p.createRun(); r.setText("POI创建的Word段落文本"); //设置为粗体 r.setBold(true); //设置颜色 r.setColor("FF0000"); // 新建一个段落 p = doc.createParagraph(); r = p.createRun(); r.setText("POI读写Excel功能强大、操作简单。"); //创建一个表格 XWPFTable table= doc.createTable(3, 3); table.getRow(0).getCell(0).setText("表格1"); table.getRow(1).getCell(1).setText("表格2"); table.getRow(2).getCell(2).setText("表格3"); FileOutputStream out = newFileOutputStream("d:\\POI\\sample.doc"); doc.write(out); out.close(); // 效果图如图2.2.1所示

创建Word文档

图 2.2.1 读取Word文档
   代码很简单,一看就懂,这里就不放效果图了 FileInputStream stream = newFileInputStream("d:\\POI\\sample.doc"); // 创建Word文件 XWPFDocument doc = new XWPFDocument(stream); //遍历段落 for(XWPFParagraph p : doc.getParagraphs()){ // 获取每段的文字 System.out.print(p.getParagraphText()); } //遍历表格 for(XWPFTable table : doc.getTables()){ // 遍历行 for(XWPFTableRow row : table.getRows()){ // 遍历该行的单元格 for(XWPFTableCell cell : row.getTableCells()){ // 获取单元格中的文字 System.out.print(cell.getText()); } } } 三.文本适配器开发

PS:



swing

需要 登录 后方可回复, 如果你还没有账号请 注册新账号