亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

輕松從VB轉向基于Swing的開發平臺

2019-11-18 11:55:24
字體:
來源:轉載
供稿:網友

  當Abacus Research AG,一家商業軟件開發公司,決定將開發平臺從 Borland 的 Delphi 轉向java Swing時,它發現自己站在了軟件開發的十字路口。

  我們大量的應用程序開發團隊擁有多年的Delphi GUI開發經驗,卻沒有任何的Java/Swing 經驗,并且我們需要在極短的時間內將大量的Delphi應用程序轉換為Swing。在研究了當時可用的GUI工具后,我們覺得我們應該通過贊助一個GPL開源Java GUI編譯器來達到自己的目標,而且這個編譯器還可以幫助其他的應用程序開發者面對相同的挑戰。

  AbaGUIBuilder ,Abacus Java GUI編譯器被設計用來實現輕松地從VB或Delphi開發轉向Java Swing。這一策略幫助Abacus Research實現了其Java版應用程序的交付,縮短了開發時間,使其開發人員把精力投向商業應用,而不是Swing框架的錯綜復雜。

  如圖1所示,AbaGUIBuilder有能夠在許多其他開發環境如VB和Delphi找到的要素。位于視窗左上角是活動對象樹,其下是Swing組件選擇區。位于視窗的中上部是開發面板,或者說是“畫布”,在這里放入Swing組件將其實例化。在右上部是屬性編輯器。下部是事件面板,包括兩個制表符頁,分別是事件代碼編輯器,為每個單獨的可視對象添加事件代碼,和消息面板,顯示AbaGUIBuilder的狀態消息。

輕松從VB轉向基于Swing的開發平臺(圖一)


  圖1. Abacus GUI編譯器.

  為什么做我們自己的GUI工具?

        為什么我們選擇寫自己的工具?開始,我們決定我們的工具應該包括以下五個要求:

  1. 輕易使用
  2.不需要布局治理器的使用經驗
  3. 不需要Swing的使用經驗
  4. 不需要輸出Swing代碼
  5. 實現商業邏輯與UI的分離

  我們在評估當時可用的GUI開發工具時發現好的IDE都是手寫Swing代碼,這就不符合我們的第一個和最要害要求。

  我們定義的輕易使用是指任一開發者不管他/她的Java Swing經驗,都具有在幾分鐘而不是幾小時內開發一個可運行的GUI表單,因此就要是開發者的精力集中在商業邏輯上而不是框架的細節。一開始我們的開發者就需要所見即所得的環境,以便能夠真實地感知當應用程序發布的時候的情況。這一功能的實現節省了開發者的大量時間。但當時我們評估的工具沒有一個能夠實現這個功能;設計的屏幕與輸出的屏幕并不一樣還有糟糕的調度算法,對我們來說簡直就是巨大的倒退。AbaGUIBuilder通過預覽模式來實現這一功能,你可以在開發時看到它運行起來的樣子。

  為什么Abacus Research要求UI和商業邏輯的分離?因為企業要處理不斷變換的政府規則,例如稅收和工資計算;我們需要在一個獨立的包裝模塊里維護規則和公式時保持UI不變的能力,使得當公式改變時,應用程序JAR(UI)并不需要變化。因此只有改變的公式需要測試,使得發布的進程簡單化。

  為了滿足這個需求,我們設計的GUI編譯器將應用程序和事件匯編到一個應用程序JAR,JAR隱藏了所有的GUI Swing 代碼并且通過一個renderer類(AdaRenderer)在運行時來執行應用程序。

  不需要Swing經驗

  為了確保開發工具能夠做到真正的所見即所得,我們決定采用類似Delphi和VB中用XY坐標來定位的布局治理方式。采用這種方式,Swing JFrame就是一個畫布,開發者可以將Swing組件放入JFrame的XY布局中。有了XY布局治理器,我們的開發者不需要理解Swing中并不熟悉的,復雜的布局治理器,這樣我們的應用程序開發者就可以把精力集中到應用程序UI和它的商業邏輯中。

  事實上,AbaGUIBuilder包含了大部分的Swing可視組件,從面板到制表符頁,還有對菜單﹑菜單項,帶有Java數據庫連接的數據庫感知組件,JFreeChart組件的支持,和導入第三方可視類庫的能力。所有這些組件都可以從組件選擇區拖入一個空框架來開發你的GUI應用程序。

  示例項目: 跟蹤開發商的聯絡信息

  最佳的展示AbaGUIBuilder RAD(快速應用程序開發)的方式就是開發一個帶有菜單欄的多文本制表符面板的示例程序。首先,你必須通過在組件選擇區選擇JFrame,將其拖入應用程序畫布中來實現將JFrame對象放入空的表單面板中。然后,將所有的可視組件托在JFrame上。注重:當你開始一個新的項目時,必須先放入JFrame,使其成為你的對象畫布,見圖2。

輕松從VB轉向基于Swing的開發平臺(圖二)


  圖2. 應用程序JFrame 作為畫布. 點擊縮略圖查看完整圖.

  其次,增加一個制表符格和兩個制表符頁。在組件選擇區的容器區內選擇JTabbedPane將其拖入JFrame1。當JTabbedPane放置好后,右鍵,在彈出菜單中選擇 Add JATabPage在面板上增加兩個制表符頁。如圖3。

輕松從VB轉向基于Swing的開發平臺(圖三)


  圖3. 增機制表符頁: 右鍵制表符頁選擇Add JATabPage.

  然后,在屬性欄中選擇TaBTitle為每個制表符頁設置標題。

輕松從VB轉向基于Swing的開發平臺(圖四)


  圖4.可以放入Swing組件的空制表符頁.

  這時,你已經有了兩個空的制表符頁,你可以從組件選擇區選擇任意的Swing組件放入其中。在我們的例子中,開發者制表符頁中包含兩個屏面,上面有一系列的JLabel和JTextField對象。你能夠很快的開發出一個類似圖5的應用程序。作為一個可視化應用程序開發者,你能夠體會到使用Abacus GUI編譯器能給你開發復雜的GUI應用程序所帶來的方便。

輕松從VB轉向基于Swing的開發平臺(圖五)


  圖5. 短時開發的應用程序.

  編譯器帶的透視圖模式是一個很有用的特征,因為它能夠預覽運行時的應用程序。通過選擇工具欄的Run選項或者按F9鍵,即可進入透視圖模式

輕松從VB轉向基于Swing的開發平臺(圖六)


  圖6. 所見即所得: 開發時檢查視覺效果.

  這時保存你的工作,按下Ctrl-S或者選擇Save選項,給項目起名叫devteam,將其保存到示例目錄中。在你保存完項目后,打開AbaGUIBuilder的示例目錄,打開文件devteam.PRoj。proj文件是一個xml文件,其中定義了應用程序中的所有類,對象,對象的性質,甚至是代碼。這是一個對你的可視項目的表達平臺。


  增加事件句柄

  為每個對象增加事件句柄是一個直截了當的過程。你所要做的就是點擊對象,從事件列表中選擇你希望中斷產生的事件,并為事件填寫合適的Java代碼。再一次證實,AbaGUIBuilder的設計符合Delphi和VB的模式。我們的目標是對應用程序開發者隱藏UI的實現,例如事件監聽器等。舉個例子,如圖7,為了實現按下Exit(退出)按鈕時,彈出一個確認對話框,首先選擇Exit按鈕的actionPerformed事件,然后填入如下Java代碼

輕松從VB轉向基于Swing的開發平臺(圖七)


  圖7. 為可視化組件增加事件句柄.

  切記,事件句柄在IDE透視圖模式下并不能使用,只有在運行時才被激活,所以你必須編譯,運行應用程序才能檢查結果。
可視化地增加一個菜單和菜單項是另一個強大的并節省時間的特征。你所要做的就是從組件選擇區選擇JMenuBar并將其放在框架的任意地方。JMenuBar一般放在頂部且XY坐標無關。然后右鍵點擊JMenuBar,彈出一個彈出框,如圖8。為菜單增加JMenu,JMenuItem(s),和事件句柄。

輕松從VB轉向基于Swing的開發平臺(圖八)


  圖8. 可視化增加菜單和菜單項.

  然后,復制Exit按鈕的actionPerformed事件代碼到Exit菜單項中,使得不管選擇Exit按鈕還是Exit菜單項都回彈出一樣的確認對話框。最后,點擊工具欄中的Save(With  Compile)?,F在你完成了你的第一個AbaGUIBuilder應用程序。


  代碼到哪里去了?

  我們經常聽到這樣的問題:代碼去哪了?AbaGUIBuilder并不是不創造Java代碼,只不過是編譯器內部生成的Java代碼不被看到和用到而已。GUI編譯器通過運行獨立的包裝程序(renderer)將內部代碼編譯到應用程序的jar文件中。事實上,你可以在/bin/output目錄下檢測AbaGUIBuilder產生的Java代碼。但是切記,這些代碼并使被外部使用的;它只不過作為一個輔助工具,當編譯器生成的代碼萬一有問題時使用。        

  生成項目文件(.proj)后,GUI編譯器生成兩個文件,你的應用程序jar文件和decl文件。隨后當你寫包裝器文件時,decl文件會有幫助。它包含了所有的對象定義和一個通用入口函數getReferences(),并且它將UI表單的所有可視元素寫為私有變量。我們可以使用decl文件程序段中的這些私有變量實現商業邏輯和UI的分離。

  開發過程中,我們推薦你使用例子文件夾中的runproz腳本來運行你的應用程序jar文件。這個腳本文件設置了classpath,填交了所有需要的JAR,使用示例Java包裝器來運行應用程序JAR。如圖9,當你運行devteam應用程序時,命令如下:runproz /abaguibuilder-1.7/samples/devteam.jar

輕松從VB轉向基于Swing的開發平臺(圖九)


  圖9. 部署應用程序.

        理解runproz的機制很重要,雖然很簡單,讓我們注重下行:"%JAVA_HOME%/bin/java.exe" exec %1

  exec是示例包裝器AbaRenderer提供的默認加載機制,參數%1指的是AbaGUIBuilder應用程序JAR的名字。當JAR的路徑和名字傳給exec.java時,它將加載和運行指定的應用程序JAR。這就是應用程序JAR運行的機制。

  編寫自己的包裝器

  AbaRenderer包裝器是一個用AbaRenderer 對象來加載應用程序jar的Java程序。包裝器是一個僅僅需要幾行代碼的簡單程序。

public class  exec
{
    public static AbaRenderer  m_AbaRenderer ;

   // Assignments for this user interface
    public static void main(String[] args)
    {
String docname = new String(args[0]);
         try
      {
          System.out.println("Loading.." + docname);
    m_AbaRenderer = new AbaRenderer(docname, true , null);
          boolean bTestLoad = m_AbaRenderer.load();
          if(bTestLoad)
          m_AbaRenderer.renderInterface();     }
      catch(Exception e)
      {e.printStackTrace();}
    }    
}



  當部署應用程序時,你可以選擇使用runproz和示例包裝器來發布它,也可以使用你自己寫的包裝器和classpath。當你需要為你的包裝器增加其它的一些特征時我們推薦你編寫自己的包裝器,例如:使用第三方程序庫的監聽器,手工初始化對象,為組合框增加代碼,或者最后將UI從業務邏輯中分離出來等。

  將業務邏輯從UI中分離出來

  為了將應用程序的UI和業務邏輯分離開,你必須寫自己的包裝器。一個分離的簡單例子就是在開發工具和項目以外,通過包裝器手工地初始化應用程序的可視組件。當你再次調用時,GUI編譯器生成一個聲明文件。這個文件有一個訪問方法可以初始化一系列私有變量,這些私有變量是表單上可視對象的引用。getReferences()方法答應開發者訪問和操作表單上的任一可視組件。

  下面的exec2程序在第一個制表符位置初始化了一個組合框,示范了一個簡單的應用程序UI和業務邏輯的分離:
public class  exec2
{
    public static AbaRenderer  m_AbaRenderer ;
    // Declarations of variables for this user interface.
    …….
    private JComboBox JStComboBox;
   // Assignments for this user interface

    public void getReferences()

    {
   …..
         //Loads the visual object JComboBox1 to private data JComboBox1
         JStComboBox= (JComboBox)m_AbaRenderer.getObject("JComboBox1");
…..
    }

   // Assignments for this user interface
    public static void main(String[] args)
    {

String docname = new String(args[0]);

       try
        {
            System.out.println("Loading.." + docname);
            m_AbaRenderer = new AbaRenderer(docname, true , null);
            boolean bTestLoad = m_AbaRenderer.load();
            if(bTestLoad)
         {
         m_AbaRenderer.renderInterface();
         getReferences();
    
          // Sample access to objects
    JStComboBox.addItem("FL");
    JStComboBox.addItem("CA");
    JStComboBox.addItem("WA");
    JStComboBox.addItem("MD");
    JStComboBox.addItem("PA");    
         }
        }
        catch(Exception e)
        {
           e.printStackTrace();
        }
    }    
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧美日韩精品| 亚洲精品美女在线| 欧美亚洲另类激情另类| 欧美一级在线亚洲天堂| 欧美日韩国产限制| 日韩欧美在线免费观看| 国语自产精品视频在线看一大j8| 欧美国产日韩一区二区三区| 俺去亚洲欧洲欧美日韩| 一区二区三区美女xx视频| 夜色77av精品影院| 狠狠躁18三区二区一区| 久久亚洲精品网站| 亚洲一区制服诱惑| 国产精品免费小视频| 尤物tv国产一区| 欧美综合国产精品久久丁香| 国产精品偷伦免费视频观看的| 26uuu亚洲国产精品| 国产精品吊钟奶在线| 亚洲第一免费播放区| 国内精品在线一区| 欧美视频一区二区三区…| 九九精品在线视频| 国产日韩欧美电影在线观看| 国产精品久久久久久久app| 国产精品视频地址| 一区二区三区高清国产| 日本亚洲欧洲色| 成人在线视频网站| 日韩电影中文 亚洲精品乱码| 这里只有视频精品| 亚洲最大福利视频网站| 色综合老司机第九色激情| 91精品国产91久久久久久吃药| 久99九色视频在线观看| 欧美在线视频观看| 一区二区三区四区精品| 亚洲欧洲免费视频| 亚洲一区二区三区成人在线视频精品| 亚洲欧美日韩精品| 精品国产视频在线| 91精品久久久久久久久久另类| 久久久久北条麻妃免费看| 亚洲精品综合久久中文字幕| 国产精品久久久久久久7电影| 亚洲一区二区三区乱码aⅴ| 欧美精品xxx| 热re99久久精品国产66热| 亚洲精品国产福利| 欧美专区第一页| 国产日韩欧美视频| 久精品免费视频| 精品久久在线播放| 欧美最近摘花xxxx摘花| 国产精品美女午夜av| 日韩av一区在线观看| 欧美大片在线影院| 国产精品黄视频| 久热精品视频在线观看| 日本久久久久久久久久久| 国产日韩在线视频| 伊人精品在线观看| 日韩一区二区精品视频| 久久久久久久久电影| 隔壁老王国产在线精品| 国产精品男女猛烈高潮激情| 日韩美女主播视频| 国内免费久久久久久久久久久| 九九久久综合网站| 亚洲一区二区三区视频播放| 日韩av最新在线观看| 在线看欧美日韩| 欧美精品做受xxx性少妇| 正在播放欧美一区| 亚洲欧美在线一区二区| 亚洲女人天堂成人av在线| 亚洲欧美日韩图片| 成人免费视频网址| 日韩成人中文字幕| 国产亚洲一区二区在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩中文字幕网址| 久久久久久久网站| 欧美亚洲国产日本| 日韩在线一区二区三区免费视频| 欧美又大粗又爽又黄大片视频| 色偷偷噜噜噜亚洲男人| 国产在线视频2019最新视频| 欧美日韩一区二区三区在线免费观看| 亚洲精品国产精品久久清纯直播| 91国语精品自产拍在线观看性色| 在线观看国产欧美| 亚洲国产99精品国自产| 亚洲午夜女主播在线直播| 亚洲乱码国产乱码精品精天堂| 欧美一级片一区| 国产69精品久久久久久| 欧美成人性生活| 久久精品视频导航| 欧美主播福利视频| …久久精品99久久香蕉国产| 久久99久久99精品免观看粉嫩| 日韩在线激情视频| 亚洲男人av在线| 亚洲电影免费观看高清完整版在线观看| 欧美在线视频免费观看| 国产黑人绿帽在线第一区| 91精品久久久久久久久不口人| 亚洲无亚洲人成网站77777| 国产精欧美一区二区三区| 91视频-88av| 亚洲精品99999| 成人国产精品一区二区| 亚洲性无码av在线| 久久97精品久久久久久久不卡| 久久久免费精品| 日韩中文字幕免费看| 精品视频在线观看日韩| 日韩欧美中文在线| 欧美精品少妇videofree| 精品国偷自产在线视频| 亚洲一级片在线看| 欧美日韩美女在线| 欧美性生交xxxxxdddd| 日韩毛片在线看| 久久露脸国产精品| 国产精品丝袜白浆摸在线| 日韩精品免费一线在线观看| 欧美另类69精品久久久久9999| 久久91亚洲精品中文字幕| 91精品国产沙发| 一区二区三区www| 欧美猛交ⅹxxx乱大交视频| 97免费在线视频| 精品国产美女在线| 亚洲国产日韩精品在线| 97视频免费在线观看| 日本久久中文字幕| 亚洲另类xxxx| 这里只有精品在线播放| www.国产精品一二区| 欧美猛交免费看| 在线观看日韩视频| 久久久久久网站| 国产精品极品美女在线观看免费| 国产精品久久久久不卡| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品欧美激情| 久久999免费视频| 啪一啪鲁一鲁2019在线视频| x99av成人免费| 欧美孕妇毛茸茸xxxx| 啊v视频在线一区二区三区| 精品中文字幕在线观看| 国产精品久久久久久久久粉嫩av| 国产精品一区二区三区久久久| 日韩亚洲精品视频| 亚洲国产91精品在线观看| 欧美电影免费观看高清完整| 国产精品色午夜在线观看| 日韩av在线不卡| 亚洲性生活视频在线观看| 久久久亚洲天堂|