Intellij Idea開發: 手把手教你Java GUI開發,並且打包成可執行Jar程序

       雖然說java gui已經淘汰了,很少有人用來開發桌面應用,但是作爲一個java開發者來說, 如果你不會python等其他語言的話, 會java gui開發,是一件非常爽的事情,  可以開發一些桌面小工具用用. 反正我是抱着這個心態,來學習瞭解java gui的, 花了一天的時間,從建工程,到打包成可執行jar包.  所以記錄一下,免得以後忘記,及給需要的人幫助!

       轉載請註明出處...雖然感覺很少人會用這個技術吧...哈哈!

     一.新建工程

1.在Intellij IDEA的首頁,選擇Create New Project 或者在已有的工程左上角興建工程

2.點擊之後,界面會跳轉到如下界面,按照圖中選擇後,點擊next即可(另圖中*處標明你必須確保你已經爲你的intellij配置過了jdk的路徑)。

3.之後,會彈出如下界面,填寫GroupId和ArtifactId即可,填寫之後繼續點擊next

4.然後會彈出如下界面,並按圖中紅框標註進行選擇,選擇完畢後再次點擊next。 

5.然後就到了最後一步,填寫工程名稱,並選擇工程所在路徑,如圖,填寫和設置完成後,點擊finish即可。

6.在intellij的左側即可顯示出創建完成的工程,如下圖所示:

以上就是使用intellij IDEA 創建一個gradle工程的簡單引導過程,具體的還要以實際操作爲準。

下圖是我寫的第一個demo的工程截圖,大家參考參考

二、創建頁面

1.網上有那種,直接創建一個Test.form頁面的教程, 用.form文件來創建頁面, 感覺不是很實用,或者說我沒有搞明白,這種方法我這裏不寫了,大家可以百度下這方面的教程

2.我是直接創建一個main函數,然後創建一個自定義窗體控件Boxx,  然後直接在Boxx裏面,寫界面的代碼.  子曰:有碼走遍天下,無碼寸步難行. 下面直接上代碼.

import Utils.EmptyUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

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

    private static int totalTime = 40;
    private static float totalDiff = 0.0f;
    private TextField tf1, tf2, tf3, tf4, tfStart;
    private TextArea taLog;         //日誌輸出區域 不可以設置顏色相關
    private JButton jbtStart;       //開始按鈕

    public void run() {
        //父窗體
        JFrame jFrame = new JFrame("青青河邊草");
        // 創建按鈕
        jbtStart = new JButton("開始");
        jbtStart.addActionListener(this);
        // 創建相關的文本域
        tf1 = new TextField("08:00");
        tf2 = new TextField("08:00");
        tf3 = new TextField("08:00");
        tf4 = new TextField("08:00");
        tfStart = new TextField("09:00");

        taLog = new TextArea();
        taLog.setColumns(30);
        taLog.setRows(150);
        taLog.setBackground(Color.CYAN);
        taLog.setFont(new Font("宋體",Font.BOLD,16));
        taLog.setEditable(false);

        // 創建相關的Label標籤
        JLabel label1 = new JLabel("時間一");
        JLabel label2 = new JLabel("時間二");
        JLabel label3 = new JLabel("時間三");
        JLabel label4 = new JLabel("時間四");
        JLabel labelStart = new JLabel("開始時間");
        JLabel labelLog = new JLabel("輸出日誌信息");
        JLabel labelTip1 = new JLabel("<html>小馬哥,特別製作:<br>1.按照格式填寫時間<br>2.盡信工具不如無工具<br>3.總工時默認40H/W</html>");
        JLabel labelTip2 = new JLabel("<html>小馬哥,簡單說明:<br>1.時間1,2,3,4填寫當天的實際工時<br>2.開始時間,目標天的上班時間<br>3.輸出日誌:EndTime2即目標天的下班時間</html>");

        //四個時間
        JPanel panel1 = new JPanel(new GridLayout(2, 4));
        panel1.add(label1);
        panel1.add(label2);
        panel1.add(label3);
        panel1.add(label4);
        panel1.add(tf1);
        panel1.add(tf2);
        panel1.add(tf3);
        panel1.add(tf4);

        //開始時間
        JPanel panel2 = new JPanel(new GridLayout(2, 1));
        panel2.add(labelStart,BorderLayout.CENTER);
        panel2.add(tfStart,BorderLayout.CENTER);
        //日誌輸出
        JPanel panel3 = new JPanel(new GridLayout(2, 1));
        panel3.add(labelLog);
        panel3.add(taLog);

        //開始按鈕及左右信息
        JPanel panel4 = new JPanel(new GridLayout(1, 3));
        panel4.add(labelTip1);
        panel4.add(jbtStart);
        panel4.add(labelTip2);

        //上級佈局
        JPanel panel22 = new JPanel(new GridLayout(4,1));
        panel22.add(panel1);
        panel22.add(panel2);
        panel22.add(panel3);
        panel22.add(panel4);

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

        // 初始化JFrame窗口
        jFrame.setLocation(800, 300);
        jFrame.setSize(600, 500);
        jFrame.setBackground(Color.darkGray);
        jFrame.setResizable(true);
        jFrame.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent view) {
        if (view.getSource() == jbtStart) {
            String day1 = tf1.getText();
            String day2 = tf2.getText();
            String day3 = tf3.getText();
            String day4 = tf4.getText();
            String startTime = tfStart.getText();

            if (EmptyUtils.isNotEmpty(day1) && EmptyUtils.isNotEmpty(day2) && EmptyUtils.isNotEmpty(day3) && EmptyUtils.isNotEmpty(day4) && EmptyUtils.isNotEmpty(startTime)) {
                calcTime(day1,day2,day3,day4);
                whatTime(startTime);
            }
        }
    }

    private void calcTime(String day1,String day2,String day3,String day4) {
        String day5="";
        int h1 = 0,h2 = 0,h3= 0,h4= 0,h5= 0,m1= 0,m2= 0,m3= 0,m4= 0,m5= 0;
        if(EmptyUtils.isNotEmpty(day1)){
            String[] splitTime1 = day1.split(":");
            h1 = Integer.parseInt(splitTime1[0]);
            m1 = Integer.parseInt(splitTime1[1]);
        }
        if(EmptyUtils.isNotEmpty(day2)){
            String[] splitTime1 = day2.split(":");
            h2 = Integer.parseInt(splitTime1[0]);
            m2 = Integer.parseInt(splitTime1[1]);
        }
        if(EmptyUtils.isNotEmpty(day3)){
            String[] splitTime1 = day3.split(":");
            h3 = Integer.parseInt(splitTime1[0]);
            m3 = Integer.parseInt(splitTime1[1]);
        }
        if(EmptyUtils.isNotEmpty(day4)){
            String[] splitTime1 = day4.split(":");
            h4 = Integer.parseInt(splitTime1[0]);
            m4 = Integer.parseInt(splitTime1[1]);
        }
        if(EmptyUtils.isNotEmpty(day5)){
            String[] splitTime1 = day5.split(":");
            h5 = Integer.parseInt(splitTime1[0]);
            m5 = Integer.parseInt(splitTime1[1]);
        }
        int totalH = h1+h2+h3+h4+h5;
        int totalM = m1+m2+m3+m4+m5;
        float totalSum = totalH + totalM/60f;
        totalDiff = totalTime - totalSum;
        taLog.append("totalSum:" + totalSum);
        taLog.append("\n");
        taLog.append("totalDif:" + totalDiff);
        taLog.append("\n");
    }

    private void whatTime(String startTime) {
        int startH =0;
        int startM =0;
        if(EmptyUtils.isNotEmpty(startTime)){
            String[] splitTime1 = startTime.split(":");
            startH = Integer.parseInt(splitTime1[0]);
            startM = Integer.parseInt(splitTime1[1]);
        }
        float resM = totalDiff % 1;
        int resH = (int) (totalDiff / 1);
        float v = resM * 60 + startM;
        if(v>=60){
            v = v-60;
            startH++;
        }
        int endH = startH + resH +1;
        float endM = v;
        taLog.append("xx:"+resM+"hh:"+resH);taLog.append("\n");
        taLog.append("endH:"+endH+"endM:"+endM);taLog.append("\n");
        taLog.append("EndTime:"+endH+":"+endM);taLog.append("\n");
        int ceilH = (int) Math.ceil(endM);
        String endTime = String.format("%02d", ceilH);
        taLog.append("EndTime2:"+endH+":"+endTime);taLog.append("\n");
    }

    @Override
    public void windowOpened(WindowEvent e) {

    }

    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }

    @Override
    public void windowClosed(WindowEvent e) {
        System.exit(0);
    }

    @Override
    public void windowIconified(WindowEvent e) {

    }

    @Override
    public void windowDeiconified(WindowEvent e) {

    }

    @Override
    public void windowActivated(WindowEvent e) {

    }

    @Override
    public void windowDeactivated(WindowEvent e) {

    }
}

 3.大家直接複製,然後運行那個main函數就可以運行了,這個是我寫的計算工時的小界面,自己用的,隨便寫的,歡迎大家拍磚哈!會出現下圖

代碼裏都是一些常用的控件,這個需要你在網上學習幾個小控件了, 對於有基礎的你,可定是小case.  不過在此,我想說一句,小馬哥曰:不要走得太遠,而忘記了爲什麼而出發. 對於gui,大家一定要目的性強一點, 需要用什麼就學什麼控件,沒必要學太多,浪費精力!

出現上面的那個這個界面,恭喜你,成功了一大半了.繼續加油!!!

三、打包成可執行jar包

打包成可執行jar包,這一步可花了我很長的時間,網上的教程很多,但挪過來又用不了,所以自己測試了很久才成功,所以,看到這個教程的你,絕對是千千萬萬的碼農中的幸運兒,哈哈!

1.點擊project structure這個按鈕,大家idea佈局不一樣,也可以在工程右鍵看到

2.選擇artifacts,然後添加一個jar包

 3.按照上圖的步驟會出現以下這個界面

按照這1,2,3,4填寫好,聰明的你不會生搬硬套吧,哈哈!!

注意,這裏有個巨大的坑,浪費了我巨多的時間,就是第4步,如果按照上面的步驟(網上的通用步驟),會出現"點擊jar包沒有反應,沒有清單文件主函數"的問題

4.解決沒有清單文件的問題,就是第4步的路徑要修改一下,修改到目錄爲....\src就可以了,對,就是這個簡單的操作,會讓你節省半天的時間,類似於下圖

 點擊ok,進入下面這個界面

 5.點擊ok,然後手動生成jar包,看下圖

如果第4步你勾選了include in project build,你可以點擊build project來生成jar包,  如果沒有勾選的話,可以點擊2 Build Atifacts來生成jar包,jar包生成成功後,會有下面這個界面

6.將jar包拷貝到桌面上,點擊運行即可,如果出現下圖,恭喜你,你成功了,成功到達了人生的巔峯了,別忘了留言告訴我哈,哈哈! 如果沒有成功,也歡迎留言,我會盡快回復的!

四.怎樣把jar包給別人用呢?

獨樂樂,不如衆樂樂! 那麼如何把你的工具分享給妹子用呢? 不能讓妹子也裝個jre吧,那樣會嚴重影響你在妹子心中的高大形象.哈哈!

歡迎大家關注我的博客,我會再更新一個教程,深度打包jar包,在任何一個妹子的電腦上暢通運行!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章