iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

學習 Android Kotlin 隨筆系列 第 29

[ Day 29 ] Java 專案 - 整理 code 之怎麼還是不太乾淨!

  • 分享至 

  • xImage
  •  

前言

這篇延續最近在做的 Java 專案,想聊聊在這個專案的一些心得。

Java 具有物件導向的特性,而這次碰到的這個專案,是要寫個 GUI 的介面出來,概念不難,但是要畫的元件非常多,相當的雜,一不小心 code 就會糙起來了。
是碼農,還是程式設計師,從對 clean code 的概念以及寫 code 的概念就有非常大的差別,自己也仍然在這條學習的路上,寫糙 code 的維護成本是非常高的(因為自己曾經體會過QQ),付出過代價之後才發現 clean code 的重要性!

現實面來講,要是專案很有邏輯的話,在維護跟製作的過程一定會花更少的時間,當然啦~這就是為何會有人說,二流的工程師才需要加班。

簡化專案的過程

這只是參考,絕對不是最好的解法。

在這個專案會使用到很多的 JTable,每個 table 裡面的 columns 又相當的多,下面是簡化的幾個要點。

  • 談專案時

    那時在談專案的時候,就有感受到要處理很繁雜的公式加總(要算稅值那方面的),而我這個沒接觸過他們專業的門外漢,必須先想辦法把每一細項的計算都先學會,而案主是把所有的知識先教給我,之後我再自行整理。
    我覺得在整理的時候,就是一個可以讓程式複雜度降低的過程,哪些事情是重複的,哪些元件其實設計得過於複雜 ... 等等。

  • Coding 時

    自己的 code 習慣是,會先稍微規劃之後,就開始寫,邊寫就邊有感覺哪些東西可以簡化,寫到某個功能確定完成之後,再回過頭來大幅度的整理。

    舉個例子,這個專案需要用到許多張表格,而我一開始的確是使用了 JTable 下去做,做著做著發現,我希望這個表格有 row 的 header(原生沒有)、我希望這個 JTable 的 cell 只要點擊一次就可以進行編輯(原生要點擊兩次)、我希望有些 column 不能被編輯 ... 等等,這些都是在寫 code 的時候發現的(功力還沒好到一開始就規劃好)。

    所以之後自己又把這些想要客製化的功能,額外做一個 class,去 extends JTable,這個動作讓我清潔了好多重複性很高的糙 code,也提高了程式的閱讀性。

實作 code

  • 客製化 table
    這裡面對 table 做了一些客製化的設定,來滿足我的專案需求,包含了某些時候會出現 row header,所以那個 column 不能被編輯,以及我希望點擊 cell 一下,就進入編輯,還有前篇提到的 setRowSelectionAllowed ,是為了不要出現 row selected background。
    JTable table = null;
    
    if(hasRowHeaders) { 
        table = new JTable(dm){
            public boolean isCellEditable(int row, int column) {   
                if(column == 0) {
                    return false;
                }
                return true;
            };
        };;
    }else {
        table = new JTable(dm);
    }
    table.setRowSelectionAllowed(false);
    DefaultCellEditor singleclick = new DefaultCellEditor(new JTextField());
    singleclick.setClickCountToStart(1);
    for (int i = 0; i < table.getColumnCount(); i++) {
        table.setDefaultEditor(table.getColumnClass(i), singleclick);
    } 
    table.getTableHeader().setPreferredSize(
             new Dimension(this.getWidth(), 35)
        );
    this.getViewport().add(table);
    

上一篇
[ Day 28 ] Java 專案 - Java.Swing ViewGroup 的觸發事件問題
下一篇
[ Day 30 ] 下回合
系列文
學習 Android Kotlin 隨筆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言