Java Swing 开发总结汇总贴

文章目录

  • Java Swing 开发总结汇总贴
    • 1. Java GUI 开发思路
      • a. 程序的编写
        • IDEA + Swing + JFormDesigner(可视化开发插件)
        • eclipse + Swing + WindowBuilder(可视化开发插件)
        • IDEA + JavaFX + SceneBuilder(可视化开发插件)
      • b. 项目打包封装成exe程序
      • c. 项目发布到GitHub上
    • 2. 监听器Listener的三种写法
      • 通过实际项目来进行说明
        • Demo类
        • main类
    • 3. Swing开发过程中文件、文件夹的处理问题
      • 通过实际项目来进行说明
        • Demo类,再加上上述mian类才能作为一个完整的程序运行
    • 4. 测试某块代码的运行时间
    • 5. BigInteger 大整数类的使用
    • 6. 问题描述汇总
      • 描述1
      • 描述2
      • 汇总时间:
      • 2022年4月8日星期五
      • 2022年4月14日星期四

1. Java GUI 开发思路

a. 程序的编写

IDEA + Swing + JFormDesigner(可视化开发插件)
eclipse + Swing + WindowBuilder(可视化开发插件)
IDEA + JavaFX + SceneBuilder(可视化开发插件)

b. 项目打包封装成exe程序

先在IDE中将项目打包成 jar 包,再通过 exe4j 将 jar 包转换成exe可执行文件

c. 项目发布到GitHub上

其中的一种步骤:

1、在浏览器端登录GitHub账号

2、点击’New Repository’创建一个新的仓库

3、在电脑端打开 git-bash (需要事先在电脑上安装好Git)

4、在终端中通过 cd 命令切换到项目根目录下

5、进行初始化:git init

6、将本目录下的所有文件添加到 git 管理:git add .

7、提交本地仓库:git commit -m “备注”

8、关联到Github上:git remote add origin https://仓库地址

9、将本地代码提交至GitHub:git push -u origin master

2. 监听器Listener的三种写法

通过实际项目来进行说明

Demo类
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;//监听器Listener的三种写法:内部类、匿名内部类、Lambda表达式/*** Demo为自定义类,继承父类JFrame* showTime()为自定义函数**/
public class Demo extends JFrame
{//创建了一个标签类的成员变量label,文本内容显示"00:00:00"JLabel label = new JLabel("00:00:00"); //父类的属性,可被内部类访问public Demo() {super();//创建并设置容器panelJPanel panel = new JPanel();this.setContentPane(panel);//创建按钮并将其添加到容器panel中JButton button1 = new JButton("按钮1");panel.add(button1);JButton button2 = new JButton("按钮2");panel.add(button2);JButton button3 = new JButton("按钮3");panel.add(button3);//将label添加到容器panel中panel.add(label);//文本框的创建,文本框设置为20个英文字母的宽度,将其添加到容器中JTextField textField = new JTextField(20);panel.add(textField);//文本框显示内容的设置textField.setText("Hello World");//button1、2、3实现的功能是一样的//按钮button1事件-内部类:MyActionListener listener = new MyActionListener();button1.addActionListener(listener);//按钮button2事件-匿名内部类:button2.addActionListener(new ActionListener() {@Override //实现方法public void actionPerformed(ActionEvent e) {showTime();}});//按钮button3事件-lambda表达式:button3.addActionListener( (selfDefine) -> { showTime(); } );}//MyActionListener是子类,也是内部类,ActionListener是接口,接口类不直接使用,要派生出一个子类private class MyActionListener implements ActionListener {@Override //实现方法public void actionPerformed(ActionEvent e) {showTime();}}//自定义函数用于显示系统时间public void showTime() {SimpleDateFormat date = new SimpleDateFormat("HH:mm:ss");//获取当前系统时间并格式化存储在timeStr中String timeStr = date.format(new Date());System.out.println(timeStr);//标签label文本内容显示字符串timeStr的内容,即显示系统时间label.setText(timeStr);}
}
main类
import javax.swing.*;public class main {//该程序采用Java Swing进行开发,IDE为IntelliJ IDEA 2021.1public static void main(String[] args){//JFrame指一个窗口,构造方法的参数为窗口标题JFrame frame  = new Demo(); //多态Demo demo = new Demo();//设置窗口标题frame.setTitle("Demo");//设置窗口大小frame.setSize(830,355);//固定窗口大小frame.setResizable(false);//当关闭窗口时,退出整个程序frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗口frame.setVisible(true);}
}

3. Swing开发过程中文件、文件夹的处理问题

通过实际项目来进行说明

Demo类,再加上上述mian类才能作为一个完整的程序运行
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;/*** Demo为自定义类,继承父类JFrame* 假设演示所用文件为XXX.txt* 绝对路径为C:\Users\XXX.txt**/
public class Demo extends JFrame {//用于文件、文件夹的信息存储String fileContent;String filename;String path;String frontPath;String extension;//用于文件名的存储String[] fileNames;//用于文件绝对路径的存储String[] dirFilePath;//用于一层文件夹中文件内容的存储String[] fileTexts;public Demo() {super();//创建并设置容器panelJPanel panel = new JPanel();this.setContentPane(panel);//创建按钮并将其添加到容器panel中JButton button1 = new JButton("打开文件");panel.add(button1);JButton button2 = new JButton("打开文件夹");panel.add(button2);//打开文件事件-lambda表达式button1.addActionListener(e -> fileOpen());//打开文件夹事件-lambda表达式button2.addActionListener(e -> dirOpen());}//====================文件处理======================/*** 从给定路径path中读取文件(读取字符流)* @param path String 绝对路径* @return str String 从文件中读取的内容**/public String readFile(String path){FileReader reader = null;String str = null;try {reader = new FileReader(path);} catch (FileNotFoundException e) {e.printStackTrace();}int len = 0;//通过buffer一次读取一个数组,数组要设置的大一些char[] buffer = new char[102400];while (true){try {if (!((len = reader.read(buffer)) != -1)) break;} catch (IOException e) {e.printStackTrace();}//将字符数组转换成字符串str = new String(buffer,0,len);}System.out.println(str);try {reader.close(); //释放资源} catch (IOException e) {e.printStackTrace();}return str;}/*** 将字符串中的内容写到指定路径的文件中(输出字符流)* @param str  String 字符串str中的内容* @param path String 绝对路径**/public void writeFile(String str,String path){FileWriter writer;try {writer = new FileWriter(path);writer.write(str);writer.flush(); //清空缓冲区writer.close(); //释放资源} catch (IOException ioException) {ioException.printStackTrace();}}public void fileOpen(){//创建一个JFrame组件为parent组件JFrame file1 = new JFrame("选择文件");//创建文件选择器JFileChooser choosers = new JFileChooser();//设置为只能选文件choosers.setFileSelectionMode(JFileChooser.FILES_ONLY);//默认一次只能选择一个文件,参数改为"true"后可选择多个文件choosers.setMultiSelectionEnabled(true);//弹出选择文件对话框int flag = choosers.showOpenDialog(file1);if(flag == JFileChooser.APPROVE_OPTION) {//获取文件的名称filename = choosers.getSelectedFile().getName();//获取选择文件的路径path = choosers.getSelectedFile().getPath();//获取文件的扩展名extension = path.substring(path.lastIndexOf('.'));//获取文件名之前的路径frontPath = path.substring(0, path.lastIndexOf('\\')); //需要对'\'进行转义表示//XXX.txtSystem.out.println("用户选择了文件:" + filename);//C:\Users\XXX.txtSystem.out.println("文件绝对路径:" + path);//C:\UsersSystem.out.println("文件路径:" + frontPath);//.txtSystem.out.println("文件扩展名:" + extension);//从源文件中读取字符流,存为字符串fileContent = readFile(path);//将读到的字符流写入文本文档中,在"."之前插入字符串"_Src","_Src"为自定义标识StringBuilder sb = new StringBuilder(filename);//C:\Users\XXX_Src.txtwriteFile(fileContent, frontPath+"\\"+sb.insert(sb.indexOf("."),"_Src"));}}//==========================文件夹处理============================public void dirOpen(){//创建一个JFrame组件为parent组件JFrame file2 = new JFrame("选择文件");//创建文件选择器JFileChooser choosers = new JFileChooser();//设置为只能选文件choosers.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//默认一次只能选择一个文件夹,参数改为"true"后可选择多个文件夹choosers.setMultiSelectionEnabled(true);//弹出选择文件对话框int flag = choosers.showOpenDialog(file2);if(flag == JFileChooser.APPROVE_OPTION) {//获取文件夹的名称filename = choosers.getSelectedFile().getName();//获取选择文件夹的路径path = choosers.getSelectedFile().getPath();frontPath = path.substring(0, path.lastIndexOf('\\'));//UsersSystem.out.println("用户选择了文件夹:" + filename);//C:\\UsersSystem.out.println("文件夹绝对路径:" + path);//获取文件夹下的所有文件// 只能获取一层文件夹下的所有文件,且该文件夹内没有其它文件夹,否则会报错(描述1)File fi = choosers.getSelectedFile();File[] files = fi.listFiles();//将目录下的所有文件名称及文件地址存储到列表中List<String> listF = new ArrayList<>();List<String> listP = new ArrayList<>();for (File file : files) {System.out.println(file.getName());listF.add(file.getName());listP.add(path + "\\" + file.getName());}//将列表中的内容存到字符串数组中fileNames = listF.toArray(new String[listF.size()]);dirFilePath = listP.toArray(new String[listP.size()]);//在所选文件夹的路径下创建目录DES,如果没有目录DES则新建一个File dir = new File(path+"\\Demo");if(!dir.exists()){dir.mkdir();}//必须先实例化,否则会触发空指针异常://"Cannot invoke "java.util.List.add(Object)" because "this.texts" is null"List<String> texts = new ArrayList<>();//循环处理遍历得到的文件for (int i = 0; i < dirFilePath.length; i++) {//注意,写代码时fileNames[i]写为fileName会报错StringBuilder sb = new StringBuilder(fileNames[i]);//得到文件的绝对路径System.out.println(dirFilePath[i]);//"XXX.txt变为XXX_Src.txt"String temp = String.valueOf(sb.insert(sb.indexOf("."), "_Src"));//字符串连接得到新文件的绝对路径String newFileAbsolute = dirFilePath[i].substring(0, dirFilePath[i].lastIndexOf('\\')) + "\\Demo\\" + temp;System.out.println("新文件名:"+temp);System.out.println("新文件的绝对路径:"+newFileAbsolute);//将读取到的字符流存储到列表中fileContent = null;fileContent = readFile(dirFilePath[i]);texts.add(fileContent);//将读到的字符流写到新文件中writeFile(fileContent, newFileAbsolute);}//将列表中的内容存到字符串数组中fileTexts = texts.toArray(new String[texts.size()]);}}
}

4. 测试某块代码的运行时间

//在程序可视化界面上显示某部分代码的运行时间
long stime; //开始时间
long etime; //结束时间
stime = etime = 0;
//系统纳秒计时
stime = System.nanoTime();
yourSelfDefine(); //需要测试的函数
etime = System.nanoTime();
//计算代码执行时间,加上单位“毫秒”,并将结果显示在标签label上
label.setText((etime - stime) / 10E6 +" 毫秒");

5. BigInteger 大整数类的使用

注:以下内容的变量之间相互关联
//String 转换为 BigInteger
String str = "12306";
BigInteger e = new BigInteger(str);//假设里面已存有若干组大整数
BigInteger[] cipher;
//将得到的大整数类数组(cipher)转换为字符串数组(tempStr)形式进行存储
String[] tempStr;
List<String> tempList = new ArrayList<>();
for (int i = 0; i < cipher.length; i++) {tempList.add(String.valueOf(cipher[i]));
}
//注:如果tempStr之前存有内容,该句会将内容清空然后存入tempList中的内容
tempStr = tempList.toArray(new String[tempList.size()]);//文件按行写入FileWriter writer;try {//这里的filePath指要写入文件的绝对路径writer = new FileWriter(filePath);BufferedWriter bw = new BufferedWriter(writer);//可以是j < tempStr.length-1 for (int j = 0; j < cipher.length; j++) {bw.write(tempStr[j]);bw.newLine(); //换行bw.flush();   //清空缓冲区}writer.flush(); //清空缓冲区writer.close(); //释放资源} catch (IOException ioException) {ioException.printStackTrace();}//按行读取读取文件,存入字符串数组中List<String> readLine = new ArrayList<>();try {FileReader reader = new FileReader(filePath);BufferedReader br = new BufferedReader(reader);while (true) {try {String temp = br.readLine();readLine.add(temp);if (temp == null)break;} catch (IOException e) {e.printStackTrace();}}try {br.close();reader.close();} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();}String[] temp1;temp1 = readLine.toArray(new String[readLine.size()]);//将String数组中的内容存到BigInteger数组中for (int k = 0; k < cipher.length; k++) {//String转BigIntegercipher[k] = new BigInteger(temp1[k]);}//注意!此句指申请一个长度为0的数组,需要进行清空数组的操作时要注意申请数组的空间问题cipher = new BigInteger[0]; //会报错,解决方案见“描述2”for (int i = 0; i < temp1.length - 1; i++) {//String转BigInteger...}

6. 问题描述汇总

描述1

解决办法:删掉你要打开文件夹下的文件夹或打开一个内部没有文件夹的文件夹。

描述2

解决办法:将:“cipher = new BigInteger[0]; ” 改为:“cipher = new BigInteger[temp1.length-1]; ”。

汇总时间:
2022年4月8日星期五
2022年4月14日星期四

Java Swing 开发总结汇总贴相关推荐

  1. java awt 简单计算器,JAVA Swing 开发简易计算器(上)

    开发一个简易的计算器我们主要分为两大部分:图形界面设计与具体功能实现.这篇文章讲图形界面设计,下篇讲具体功能实现. 代码下载:https://github.com/taifus/Java_Calcul ...

  2. JAVA快速开发项目汇总

    JAVA快速开发项目汇总

  3. java swing开发窗体程序开发(三)事件(Mouse,Foucs,Key,Window)

    接着刚刚的事件讲 补充一点:事件的触发前提,添加了这个监听器的组件必须是处于激活状态的才可行 (一)MouseEvent事件 该事件的触发是由鼠标的动作引起的,引起的情况可以是下面5种,按下鼠标,释放 ...

  4. java swing开发窗体程序开发(四)MVC结构

    MVC是一种设计结构(非设计模式,非设计原则) M:Model 模型层:即用于存储数据的对象 V:View 视图层:即用于为模型提供数据显示的对象 C:Controller 控制器层:即处理用户的业务 ...

  5. java swing开发窗体程序开发(一)GUI编程

    Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代 ...

  6. java IDEA开发工具汇总

    1)Notepad++ Notepad++ 是 Windows 操作系统下的一套文本编辑器,有完整的中文化接口及支持多国语言编写的功能(UTF8 技术). Notepad++ 优点: 功能比 Wind ...

  7. JAVA Swing开发单机版项目

    一.序 最近公司做的项目里出现了一个新的需求,项目大部分是为金融业定制开发的数据集成平台,包括数据的采集,处理,使用. 数据的采集方式不固定,有机构化数据,有非结构话数据,还有附件等其它文件形式. 对 ...

  8. 工具分享(3):使用Java Swing开发圆形/椭圆公章、私章图片(内附源码)

    1.迎合你的需求 当你需要一些定制内容的公章或私章图片,刚好你又懂点Java基础知识,那么你可以使用这个工具. 2.生成的效果图一览 2.1 公章效果图 圆形公章: 椭圆公章: 2.2 私章效果图 3 ...

  9. java swing 皮肤_基于Java Swing开发好看的皮肤

    先介绍几款开源及商业的皮肤. Weblaf:非常赞的套件,界面现代.简约.依赖包较少. 有开源也有商业协议,个人最喜欢的皮肤. https://github.com/mgarin/weblaf Pgs ...

  10. 基于Java swing开发的雷霆战机

    游戏截图 飞机项目的所有类的截图 主窗体类 package com.tarena.shout; import java.awt.Graphics; import java.awt.Image; imp ...

最新文章

  1. 红旗linux yum,更换红旗Linux: Asianux的yum源为网易源
  2. Swift解读专题四——字符串与字符
  3. 既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?...
  4. java程序打包为jar_将Java应用程序打包为一个(或胖)JAR
  5. python3打包成exe运行 无法定位程度输入点_Pyinstaller递归错误解决方案
  6. 11. 王道考研-二叉树的实现
  7. oracle 10g 高级复制,Oracle9i和Oracle10g之间构建高级复制环境的测试用例
  8. 网络营销练习题(黑大电商专业kaoti)
  9. 英文单词之说文解字(9)
  10. 交换机与IP数据报、ICMP协议、ARP协议
  11. 训练好的深度学习模型是怎么部署的?
  12. python学习-109-多个CSV文件的合并
  13. android 查看设备 x86,有了它 x86安卓设备就能用Windows软件了
  14. ArrayList源码翻译
  15. LED灯光偏色的原因
  16. 高精度加减法的应用——试解大数之和
  17. 软考高项(信息系统项目管理师)经验分享
  18. 电脑充不进去电的解决方法
  19. C#封装C++编写的Speex实现wav音频降噪(字节数组)
  20. 数据结构与算法--符号图

热门文章

  1. z5s+android+4.4,中兴NX403a(Nubia Z5S Mini Android 4.4)刷Recovery教程
  2. 内容公链Contentos首席科学家不建议刚毕业的年轻人直接从事区块链开发
  3. Docker 之WARNING: IPv4 forwarding is disabled. Networking will not work. 解决办法
  4. 如何用 js 获取虚拟键盘高度?- 20170817 前端开发日报
  5. 安装doctrine
  6. 第4版 网页设计与制作 HTML5+CSS3+JavaScript(赵丰年 编著)学习笔记
  7. MATLAB 中如何使用 help
  8. linux ikev1切换到ikev2,IKEv2与IKEv1的差异.doc
  9. [INFO1110课件讲解 一] USYD悉尼大学INFO1110 ED lessons Week1 课件 作业 assignment讲解
  10. 2021-2022年度“扣哒杯”AI世青赛初赛落下帷幕