Java Swing開發的一些熱點
本文轉自Java Swing開發團隊Alexander Potochkin的Blog。Alexander 說,對于長期未曾更新博客,我感到十分的抱歉。這是由于最近Java Swing開發團隊有個非常緊急的臨時任務要完成,但是現在,我很開心的告訴大家,我們大部分的任務已經完成了,我們又可以把工作重心回歸到初始設定的Swing library了.
這次是Swing應用框架真正的回歸,這個項目也將是目前Swing團隊工作的重中之重。我們還編組了一小隊人馬作為SAF的探路者,按部就班的開展工作。我的隊友們總喜歡問我“當前的SAF究竟存在什么樣的問題?”“究竟我理想中的SAF是什么樣子?”每當這時代碼就開始在我的腦海中翻滾。
這篇博文,將會為我的同僚們和Swing程序員們解答上述的問題。
已有代碼的單例問題
使用靜態方法Application.launch()保存當前的應用程序實例到一個靜態空間,同時用Application.getInstance()返回結果。
其目的是防止不同的AppContexts向同一個JVM內核發出請求。想象一下,如果兩個applet在同一個html上發出請求,他們將在同一個JVM內核中運行,分享不同類的靜態數據,因此其中一個applet不能在使用Application.getInstance()返回到自己的實例中了。
設計類試圖
讓我們先來看一看描述Java Swing開發類的javadoc文本:
*一個涵蓋頂層應用GUI組件的視圖,與JFrame和 Applet類似。它的主界面部分包含:菜單欄,工具欄,組件和一個狀態欄,所有這些內容都是可選的(盡管沒有主要組件的視圖看起來會很奇怪)。*
類試圖包含多種調用方法,例如:getMenuBar()/setMenuBar(), getToolBar()/setToolbar() and getRootPane()。
當每個視圖都有自己的框架,而每個框架也擁有自己的菜單欄時,MDI應用程序可以正常工作。這就好像是大多數本地應用程序可以在Windows和Unix上運行一樣。然而,一個出色的框架還要同時支持SDI應用程序,在Mac操作系統上,所有應用程序的視圖都在共享同一個菜單欄,這種用視圖定做主菜單欄的方法要比為每個視圖配備相應的菜單欄更為方便。也正因此,在Mac應用軟件中,發現一個只有一個菜單欄卻沒有主要組件的視圖并不稀奇。
獨立應用框架與JFrame綁定.
一個優秀的框架應具有友好的IDE交互,比方說,我希望用我最為喜愛的IDE設計軟件去建立一個獨立應用框架。在這種情況下,我不應該明確地使用類似于JFrame或JDialog的類,因為這將讓使用IDE去控制和設計一個真正的JFrame變得非常困難的。
Applets是更為明顯的例子,作為一個Applets和一個獨立的應用程序,它在運行獨立應用框架時應更加得心應手。它的常見模式將提供各類建立JFrame所必需的數據,卻并不明確的創建它,而是容許不同的父窗體用不同的方法來展示這些視圖。
不支持活動菜單
我并不是Mac用戶,但是當我了解要想讓Swing應用程序能在Mac系統上像本地程序一般運行是多么困難時,是這樣的印象深刻。菜單欄是一個主要的問題,它與Mac不同,具體參見下文。我不得不說,SAF需要自動解決這類問題。
理想框架
一個小巧靈活,每個部分都有很強的功能性并且容易被重載。比如,當你不想執行LocalStorage時,它將很容易幫你停止目前的執行任務。它可以避免目前Java Swing開發中的問題,還知道如何讓一個應用程序可以在特定操作系統上運行。
當下問題
我提到過,目前我們只針對一部分SAF的問題展開了討論。你對我提出的問題有什么想法嗎?或者你覺得SAF應該具有什么必須的工能呢?
【編輯推薦】