Intellij Idea开发: 手把手教你Java GUI开发,并且打包成可执行Jar程序

  • A+
所属分类:Java

Intellij Idea开发: 手把手教你Java GUI开发,并且打包成可执行Jar程序 - mawei7510的博客 - CSDN博客

Intellij Idea开发: 手把手教你Java GUI开发,并且打包成可执行Jar程序

虽然说java gui已经淘汰了,很少有人用来开发桌面应用,但是作为一个java开发者来说, 如果你不会python等其他语言的话, 会java gui开发,是一件非常爽的事情,  可以开发一些桌面小工具用用. 反正我是抱着这个心态,来学习了解java gui的, 花了一天的时间,从建工程,到打包成可执行jar包.  所以记录一下,免得以后忘记,及给需要的人帮助!

> >      一.新建工程

1.在Intellij IDEA的首页,选择Create New Project 或者在已有的工程左上角兴建工程

5d721b8f700e3871c4000074_html_.png
5d721b8f700e3871c4000075_html_.png

2.点击之后,界面会跳转到如下界面,按照图中选择后,点击next即可(另图中*处标明你必须确保你已经为你的intellij配置过了jdk的路径)。

5d721b8f700e3871c4000076_html_.png

3.之后,会弹出如下界面,填写GroupId和ArtifactId即可,填写之后继续点击next

5d721b8f700e3871c4000077_html_.png

4.然后会弹出如下界面,并按图中红框标注进行选择,选择完毕后再次点击next。

5d721b8f700e3871c4000078_html_.png

5.然后就到了最后一步,填写工程名称,并选择工程所在路径,如图,填写和设置完成后,点击finish即可。

5d721b8f700e3871c4000079_html_.png

6.在intellij的左侧即可显示出创建完成的工程,如下图所示:

5d721b8f700e3871c400007a_html_.png
以上就是使用intellij IDEA 创建一个gradle工程的简单引导过程,具体的还要以实际操作为准。
下图是我写的第一个demo的工程截图,大家参考参考
5d721b8f700e3871c400007b_html_.png

二、创建页面

1.网上有那种,直接创建一个Test.form页面的教程, 用.form文件来创建页面, 感觉不是很实用,或者说我没有搞明白,这种方法我这里不写了,大家可以百度下这方面的教程

2.我是直接创建一个main函数,然后创建一个自定义窗体控件Boxx,  然后直接在Boxx里面,写界面的代码.  子曰:有码走遍天下,无码寸步难行. 下面直接上代码.

1.
import Utils.EmptyUtils;
2.

3.
import javax.swing.;
4.
import java.awt.
;
5.
import java.awt.event.ActionEvent;
6.
import java.awt.event.ActionListener;
7.
import java.awt.event.WindowEvent;
8.
import java.awt.event.WindowListener;
9.

10.
/*
11.
* @create: 2019-04-26 15:29
12.
* @author: Nick.Ma
13.
* @Desc:
14.
/
15.
public class Boxx extends Thread implements ActionListener, WindowListener {
16.

17.
private static int totalTime = 40;
18.
private static float totalDiff = 0.0f;
19.
private TextField tf1, tf2, tf3, tf4, tfStart;
20.
private TextArea taLog; //日志输出区域 不可以设置颜色相关
21.
private JButton jbtStart; //开始按钮
22.

23.
public void run() {
24.
//父窗体
25.
JFrame jFrame = new JFrame("青青河边草");
26.
// 创建按钮
27.
jbtStart = new JButton("开始");
28.
jbtStart.addActionListener(this);
29.
// 创建相关的文本域
30.
tf1 = new TextField("08:00");
31.
tf2 = new TextField("08:00");
32.
tf3 = new TextField("08:00");
33.
tf4 = new TextField("08:00");
34.
tfStart = new TextField("09:00");
35.

36.
taLog = new TextArea();
37.
taLog.setColumns(30);
38.
taLog.setRows(150);
39.
taLog.setBackground(Color.CYAN);
40.
taLog.setFont(new Font("宋体",Font.BOLD,16));
41.
taLog.setEditable(false);
42.

43.
// 创建相关的Label标签
44.
JLabel label1 = new JLabel("时间一");
45.
JLabel label2 = new JLabel("时间二");
46.
JLabel label3 = new JLabel("时间三");
47.
JLabel label4 = new JLabel("时间四");
48.
JLabel labelStart = new JLabel("开始时间");
49.
JLabel labelLog = new JLabel("输出日志信息");
50.

JLabel labelTip1 = new JLabel("小马哥,特别制作:
1.按照格式填写时间
2.尽信工具不如无工具
3.总工时默认40H/W");

51.

JLabel labelTip2 = new JLabel("小马哥,简单说明:
1.时间1,2,3,4填写当天的实际工时
2.开始时间,目标天的上班时间
3.输出日志:EndTime2即目标天的下班时间");

52.

53.
//四个时间
54.
JPanel panel1 = new JPanel(new GridLayout(2, 4));
55.
panel1.add(label1);
56.
panel1.add(label2);
57.
panel1.add(label3);
58.
panel1.add(label4);
59.
panel1.add(tf1);
60.
panel1.add(tf2);
61.
panel1.add(tf3);
62.
panel1.add(tf4);
63.

64.
//开始时间
65.
JPanel panel2 = new JPanel(new GridLayout(2, 1));
66.
panel2.add(labelStart,BorderLayout.CENTER);
67.
panel2.add(tfStart,BorderLayout.CENTER);
68.
//日志输出
69.
JPanel panel3 = new JPanel(new GridLayout(2, 1));
70.
panel3.add(labelLog);
71.
panel3.add(taLog);
72.

73.
//开始按钮及左右信息
74.
JPanel panel4 = new JPanel(new GridLayout(1, 3));
75.
panel4.add(labelTip1);
76.
panel4.add(jbtStart);
77.
panel4.add(labelTip2);
78.

79.
//上级布局
80.
JPanel panel22 = new JPanel(new GridLayout(4,1));
81.
panel22.add(panel1);
82.
panel22.add(panel2);
83.
panel22.add(panel3);
84.
panel22.add(panel4);
85.

86.
jFrame.setLayout(new BorderLayout());
87.
jFrame.add(panel22, BorderLayout.CENTER);
88.

89.
// 初始化JFrame窗口
90.
jFrame.setLocation(800, 300);
91.
jFrame.setSize(600, 500);
92.
jFrame.setBackground(Color.darkGray);
93.
jFrame.setResizable(true);
94.
jFrame.setVisible(true);
95.

96.
}
97.

98.
@Override
99.
public void actionPerformed(ActionEvent view) {
100.
if (view.getSource() == jbtStart) {
101.
String day1 = tf1.getText();
102.
String day2 = tf2.getText();
103.
String day3 = tf3.getText();
104.
String day4 = tf4.getText();
105.
String startTime = tfStart.getText();
106.

107.

if (EmptyUtils.isNotEmpty(day1) && EmptyUtils.isNotEmpty(day2) && EmptyUtils.isNotEmpty(day3) && EmptyUtils.isNotEmpty(day4) && EmptyUtils.isNotEmpty(startTime)) {

108.
calcTime(day1,day2,day3,day4);
109.
whatTime(startTime);
110.
}
111.
}
112.
}
113.

114.
private void calcTime(String day1,String day2,String day3,String day4) {
115.
String day5="";
116.
int h1 = 0,h2 = 0,h3= 0,h4= 0,h5= 0,m1= 0,m2= 0,m3= 0,m4= 0,m5= 0;
117.
if(EmptyUtils.isNotEmpty(day1)){
118.
String[] splitTime1 = day1.split(":");
119.
h1 = Integer.parseInt(splitTime1[0]);
120.
m1 = Integer.parseInt(splitTime1[1]);
121.
}
122.
if(EmptyUtils.isNotEmpty(day2)){
123.
String[] splitTime1 = day2.split(":");
124.
h2 = Integer.parseInt(splitTime1[0]);
125.
m2 = Integer.parseInt(splitTime1[1]);
126.
}
127.
if(EmptyUtils.isNotEmpty(day3)){
128.
String[] splitTime1 = day3.split(":");
129.
h3 = Integer.parseInt(splitTime1[0]);
130.
m3 = Integer.parseInt(splitTime1[1]);
131.
}
132.
if(EmptyUtils.isNotEmpty(day4)){
133.
String[] splitTime1 = day4.split(":");
134.
h4 = Integer.parseInt(splitTime1[0]);
135.
m4 = Integer.parseInt(splitTime1[1]);
136.
}
137.
if(EmptyUtils.isNotEmpty(day5)){
138.
String[] splitTime1 = day5.split(":");
139.
h5 = Integer.parseInt(splitTime1[0]);
140.
m5 = Integer.parseInt(splitTime1[1]);
141.
}
142.
int totalH = h1+h2+h3+h4+h5;
143.
int totalM = m1+m2+m3+m4+m5;
144.
float totalSum = totalH + totalM/60f;
145.
totalDiff = totalTime - totalSum;
146.
taLog.append("totalSum:" + totalSum);
147.
taLog.append("\n");
148.
taLog.append("totalDif:" + totalDiff);
149.
taLog.append("\n");
150.
}
151.

152.
private void whatTime(String startTime) {
153.
int startH =0;
154.
int startM =0;
155.
if(EmptyUtils.isNotEmpty(startTime)){
156.
String[] splitTime1 = startTime.split(":");
157.
startH = Integer.parseInt(splitTime1[0]);
158.
startM = Integer.parseInt(splitTime1[1]);
159.
}
160.
float resM = totalDiff % 1;
161.
int resH = (int) (totalDiff / 1);
162.
float v = resM * 60 + startM;
163.
if(v>=60){
164.
v = v-60;
165.
startH++;
166.
}
167.
int endH = startH + resH +1;
168.
float endM = v;
169.
taLog.append("xx:"+resM+"hh:"+resH);taLog.append("\n");
170.
taLog.append("endH:"+endH+"endM:"+endM);taLog.append("\n");
171.
taLog.append("EndTime:"+endH+":"+endM);taLog.append("\n");
172.
int ceilH = (int) Math.ceil(endM);
173.
String endTime = String.format("%02d", ceilH);
174.
taLog.append("EndTime2:"+endH+":"+endTime);taLog.append("\n");
175.
}
176.

177.
@Override
178.
public void windowOpened(WindowEvent e) {
179.

180.
}
181.

182.
@Override
183.
public void windowClosing(WindowEvent e) {
184.
System.exit(0);
185.
}
186.

187.
@Override
188.
public void windowClosed(WindowEvent e) {
189.
System.exit(0);
190.
}
191.

192.
@Override
193.
public void windowIconified(WindowEvent e) {
194.

195.
}
196.

197.
@Override
198.
public void windowDeiconified(WindowEvent e) {
199.

200.
}
201.

202.
@Override
203.
public void windowActivated(WindowEvent e) {
204.

205.
}
206.

207.
@Override
208.
public void windowDeactivated(WindowEvent e) {
209.

210.
}
211.
}
 3.大家直接复制,然后运行那个main函数就可以运行了,这个是我写的计算工时的小界面,自己用的,随便写的,欢迎大家拍砖哈!会出现下图
5d721b90700e3871c400007c_html_.png

代码里都是一些常用的控件,这个需要你在网上学习几个小控件了, 对于有基础的你,可定是小case.  不过在此,我想说一句,小马哥曰:不要走得太远,而忘记了为什么而出发. 对于gui,大家一定要目的性强一点, 需要用什么就学什么控件,没必要学太多,浪费精力!

出现上面的那个这个界面,恭喜你,成功了一大半了.继续加油!!!

三、打包成可执行jar包

打包成可执行jar包,这一步可花了我很长的时间,网上的教程很多,但挪过来又用不了,所以自己测试了很久才成功,所以,看到这个教程的你,绝对是千千万万的码农中的幸运儿,哈哈!

1.点击project structure这个按钮,大家idea布局不一样,也可以在工程右键看到
5d721b90700e3871c400007d_html_.png
2.选择artifacts,然后添加一个jar包
5d721b90700e3871c400007e_html_.png
5d721b90700e3871c400007f_html_.png
 3.按照上图的步骤会出现以下这个界面
5d721b90700e3871c4000080_html_.png
按照这1,2,3,4填写好,聪明的你不会生搬硬套吧,哈哈!!
注意,这里有个巨大的坑,浪费了我巨多的时间,就是第4步,如果按照上面的步骤(网上的通用步骤),会出现"点击jar包没有反应,没有清单文件主函数"的问题
4.解决没有清单文件的问题,就是第4步的路径要修改一下,修改到目录为....\src就可以了,对,就是这个简单的操作,会让你节省半天的时间,类似于下图
5d721b90700e3871c4000081_html_.png

点击ok,进入下面这个界面5d721b90700e3871c4000082_html_.png

5.点击ok,然后手动生成jar包,看下图
5d721b90700e3871c4000083_html_.png

如果第4步你勾选了include in project build,你可以点击build project来生成jar包,  如果没有勾选的话,可以点击2 Build Atifacts来生成jar包,jar包生成成功后,会有下面这个界面

5d721b90700e3871c4000084_html_.png

6.将jar包拷贝到桌面上,点击运行即可,如果出现下图,恭喜你,你成功了,成功到达了人生的巅峰了,别忘了留言告诉我哈,哈哈! 如果没有成功,也欢迎留言,我会尽快回复的!

5d721b90700e3871c4000085_html_.png

四.怎样把jar包给别人用呢?

独乐乐,不如众乐乐! 那么如何把你的工具分享给妹子用呢? 不能让妹子也装个jre吧,那样会严重影响你在妹子心中的高大形象.哈哈!  请参考我得下一篇博客手把手教你将Jar包打包成可执行的exe,可以在无jre环境下运行

欢迎大家关注我的博客!

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin