做Java UI的人應該都很熟悉Look and Feel,Swing擁有的這個功能的確是相對于SWT的一個巨大優(yōu)勢。不過SWT的GC也可以畫出自己的UI,前提是這個控件是Custom的,而不是系統(tǒng)級的。Eclipse Presentation 就是對eclipse本身UI提供的一個擴展。本來我還對這個擴展很友好的,不過現(xiàn)在覺得真是一鍋粥里掉了個老鼠屎,完全變了味道。
由于閑來無視,把一個1年半前一個德國人寫的Eclipse VS L&F Plugin down了下來,無奈bug太多,用戶體驗也和我個人感覺不一致,索性就把代碼check out 出來,作了一些本地修改。不過讓我吐血的地方就是,如果我從eclipse default L&F 切換到這個L&F,就問題一堆,從其它的L&F切換就沒有問題。Debug了半天,毫無進展,只是發(fā)現(xiàn)很多地方都是Null Exception。于是把Eclipse 2.2 L&F的代碼翻了出來,經(jīng)過仔細對照,還是沒有找到解決的方案,我就感覺怪怪的,也不知道哪兒出了問題,覺得大概是自己沒有把Presentation的代碼吃透的原因。于是又回頭開始一行行的從有問題的代碼處開始Debug,看看我的代碼和2.2L&F的代碼在運行時到底有什么區(qū)別,終于功夫不負有心人,我發(fā)現(xiàn)這個代碼片斷:
/**
* Sets the minimized state for this stack. The part may call this method to
* minimize or restore itself. The minimized state only affects the view
* when unzoomed.
*
* This implementation is specific to the 3.3 presentation's
* min/max story; otherwise it just forwards the call.
*/
public void setMinimized(boolean minimized) {
// 'Smart' minimize; move the stack to the trim
Perspective persp = getPage().getActivePerspective();
if (Perspective.useNewMinMax(persp)) {
原來3.3的L&F做了專門處理,而我的代碼和3.3是一致的,和 2.2L&F是不一致的,不過我找了半天,也沒有在2.2L&F的代碼里找出異樣之處,暈的不行。唯一的線索就是
boolean useNewMinMax = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX);
可惡的是,IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX 這個靜態(tài)常量是無法在項目里找到eclipse自身的引用。2.2L&F plugin里也沒有,該死的eclipse肯定是寫死在代碼里了。于是翻出editplus,對eclipse ui workbench的代碼多文件搜索了一把,然后開始吐血,它居然把所有的L&F的配置都寫在UI Workbench的Preference Page里,這還算什么插件,根本就沒有把擴展的接口給出來,還是很重要的一個配置。其實2.2L&F以前只是它的一個內部package,后來重構成一個plugin,3.0L&F到現(xiàn)在依然還是一個package。不過我想既然2.2L&F做成插件了,怎么也改和系統(tǒng)獨立開來呀,現(xiàn)在這樣就成了一個半吊子的plugin.
Eclipse終于被我bs了一把^_^,林子大了,什么鳥都有。

改過之后L&F自己覺得好用了不少
由于閑來無視,把一個1年半前一個德國人寫的Eclipse VS L&F Plugin down了下來,無奈bug太多,用戶體驗也和我個人感覺不一致,索性就把代碼check out 出來,作了一些本地修改。不過讓我吐血的地方就是,如果我從eclipse default L&F 切換到這個L&F,就問題一堆,從其它的L&F切換就沒有問題。Debug了半天,毫無進展,只是發(fā)現(xiàn)很多地方都是Null Exception。于是把Eclipse 2.2 L&F的代碼翻了出來,經(jīng)過仔細對照,還是沒有找到解決的方案,我就感覺怪怪的,也不知道哪兒出了問題,覺得大概是自己沒有把Presentation的代碼吃透的原因。于是又回頭開始一行行的從有問題的代碼處開始Debug,看看我的代碼和2.2L&F的代碼在運行時到底有什么區(qū)別,終于功夫不負有心人,我發(fā)現(xiàn)這個代碼片斷:













Eclipse終于被我bs了一把^_^,林子大了,什么鳥都有。
改過之后L&F自己覺得好用了不少