javaSwing现在使用的人比较少,应用没有以前的广泛,毕竟现在java的最新版本都是靠着企业级应用。
以下是我做的一个解析excel表格后导出的小软件,感兴趣的同学可以参考下~
附图如下:
还可以通过exe4j和inno Setup两款软件制作出一个单独的安装包,注意把jre一起打包安装就行。
swing的功能还是比较全面,因工作需要我只制作了最简单的用法,用户点击打开的时候弹出本地文件浏览界面,如图:
tips:swing的文件选择器界面比较老气,没有javafx的好看~
选择对应的文件后,处理完成会弹出保存的界面点击保存即可~
、 我制作的是解析json字符串的功能,自动搜搜excel里某一列是否全是json格式的数据,如果是的话就将json中的键作为工作表的列,值作为对应的行输出,如果存在多个键不同的情况则分多个工作薄输出。
格式布局的话就不细说,界面很单一,说下按钮绑定打开事件的点,
JButton openBtn = new JButton("打开");
openBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showFileOpenDialog(jf, msgTextArea);
}
});
panel.add(openBtn);
创建按钮对象并且绑定文件选择器事件,重写方法,注意以下几点:
// 创建一个默认的文件选取器
JFileChooser fileChooser = new JFileChooser();
// 设置默认显示的文件夹为当前文件夹
fileChooser.setCurrentDirectory(new File("."));
// 设置文件选择的模式(只选文件、只选文件夹、文件和文件均可选)
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
// 设置是否允许多选
fileChooser.setMultiSelectionEnabled(false);
// 添加可用的文件过滤器(FileNameExtensionFilter 的第一个参数是描述, 后面是需要过滤的文件扩展名 可变参数)
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("xlsx", "xlsx"));
// 设置默认使用的文件过滤器
fileChooser.setFileFilter(new FileNameExtensionFilter("xlsx", "xlsx"));
// 打开文件选择框(线程将被阻塞, 直到选择框被关闭)
int result = fileChooser.showOpenDialog(parent);
if (result == JFileChooser.APPROVE_OPTION) {
// 如果点击了"确定", 则获取选择的文件路径
File file = fileChooser.getSelectedFile();
// 如果允许选择多个文件, 则通过下面方法获取选择的所有文件
// File[] files = fileChooser.getSelectedFiles();
msgTextArea.append("打开文件: " + file.getAbsolutePath() + "\n\n");
String path = file.getAbsolutePath();
}
按照具体的业务需要,设置对应的文件上传限制和是否多选限制等,并且在确保用户点击确定后,通过 file.getAbsolutePath()方法获取用户选择的文件路径,然后才能创建文件输入流去获取这个文件并且对它进行操作。
具体业务代码就不放出来了,通过以下方式获取表后再通过sheet的方法去获取具体的数据~
InputStream inputStream = new FileInputStream(path);
// 定义一个org.apache.poi.ss.usermodel.Workbook的变量
Workbook workbook = null;
workbook = new XSSFWorkbook(inputStream);
// 获取第一张表
Sheet sheet = workbook.getSheetAt(0);
-----------------------------------------------------------------业务逻辑--------------------------------------
接下来是输出这个表单,并且客户端弹出保存的路径:
// 打开文件选择框(线程将被阻塞, 直到选择框被关闭)
int resultSave = fileChooserSave.showSaveDialog(parent);
if (resultSave == fileChooserSave.APPROVE_OPTION) {
// 如果点击了"保存", 则获取选择的保存路径
File fileSave = fileChooserSave.getSelectedFile();
msgTextArea.append("保存到文件: " + fileSave.getAbsolutePath() + "\n\n");
FileOutputStream fos = new FileOutputStream(fileSave.getAbsolutePath());
//4.写入文件
workbooks.write(fos);
//5.释放资源
fos.close();
msgTextArea.append("文件解析并保存成功!");
}
通过fileChooserSave.showSaveDialog()打开保存的文件选择框,并且判断用户点击保存后获取用户需要保存的路径,创建文件输出流时指定输出的路径,通过write()方法写入文件并导出即可。
整体来说,通过javaSwing去实现比较简单实用的小工具是非常简单的,并且通过第三方工具还可以打包成安装包,即安即用,需要注意的两点是如果有需要外部依赖的话,打包需要将依赖一起打入jar包,否则运行软件会报错找不到相关依赖,还有一点就是javaSwing需要依赖jre运行环境,如果需要在一台干净的电脑上运行的话,只需要使用innoSetup的时候选择将jre一起打包进入即可。
后续有时间的话会整理相关帖子去细化打包和安装的过程以及注意事项。