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