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