<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 28, comments - 27, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2006年9月25日

    再也無法忍受無法在Firefox下面寫blog的痛苦,再加上這里緩慢的網(wǎng)速~~~于是決定~~搬家

    新家地址:dearwolf.javaeye.com

    posted @ 2007-01-08 10:07 小小涼粉 閱讀(343) | 評(píng)論 (2)編輯 收藏

    默認(rèn)情況下,SWT的Table只會(huì)給整個(gè)Table設(shè)置Tooltip,要對(duì)每一個(gè)TableItem設(shè)置Tooltip的話,就要監(jiān)聽鼠標(biāo)事件了:


    ????????table.addMouseTrackListener(
    new?MouseTrackAdapter()?{
    ????????????
    public?void?mouseHover(MouseEvent?event)?{
    ????????????????Point?pt?
    =?new?Point(event.x,?event.y);
    ????????????????
    int?index?=?table.getTopIndex();
    ????????????????
    while?(index?<?table.getItemCount())?{
    ????????????????????TableItem?item?
    =?table.getItem(index);
    ????????????????????
    for?(int?i?=?0;?i?<?table.getColumnCount();?i++)?{
    ????????????????????????Rectangle?rect?
    =?item.getBounds(i);
    ????????????????????????
    if?(rect.contains(pt))?{
    ????????????????????????????Object?object
    =?item.getData();
    ??????????????????????????? ........
    ????????????????????????}
    ????????????????????}
    ????????????????????index
    ++;
    ????????????????}
    ????????????}
    ????????});

    在省略號(hào)的地方就可以對(duì)對(duì)象進(jìn)行轉(zhuǎn)型了

    posted @ 2006-12-11 19:13 小小涼粉 閱讀(1967) | 評(píng)論 (4)編輯 收藏

    1、有人竟敢叫囂要“屠龍”

    上海某高校吳友富同志說:因?yàn)椤褒垺钡挠⑽摹癉ragon”,在西方世界被認(rèn)為是一種充滿霸氣和攻擊性的龐然大物。“龍”的形象往往讓對(duì)中國歷史和文化了解甚少的外國人由此片面而武斷地產(chǎn)生一些不符合實(shí)際的聯(lián)想,故提出龍可能不再適合代表中國。

    解讀:中 國,一個(gè)有著上下幾千年文化歷史的國家,一個(gè)有著13億人口的大國,一個(gè)曾經(jīng)以小米加步槍硬是趕跑了持著洋槍洋炮的侵略者的民族,一個(gè)英雄輩出的國家,為 什么連我們世代所敬仰的代表我中華兒女的標(biāo)志也要問問外國人是否合適?如果哪天他們說我們的國旗、國歌他們不喜歡,我們也要更改嗎?

    所以我說了,以后爸爸也該叫爹地了。今后大伙兒也別過春節(jié)了,一起過圣誕去;除夕也不要了,改在12月24日,叫平安夜。為啥?老外不喜歡!

    2、李銀河:換妻是公民合法權(quán)利

    喪夫性學(xué)家李銀河:“換妻是公民合法權(quán)利。一切東西都應(yīng)該要豐富多彩。如果家庭都只是一夫一妻這個(gè)模式,反而顯得過于單調(diào)”
      
    解讀:這話跟前些年“自愿的奴役是一種自由”這樣一個(gè)偽命題一樣不需要廢話。自愿為奴隸當(dāng)然是一種自由,但是它違背了自由這樣一個(gè)大前提。換妻當(dāng)然也是一種合法權(quán)利,但是它違背了一夫一妻制和《婚姻法》這個(gè)大前提。

    解讀:不過不知道李銀河愿不愿自己試一把。沒丈夫跟人換可以玩3P嘛


    3、自稱白居易后人的國學(xué)辣妹白鹿鳴

    “我最擅長勾引人,孔子也不例外。我的一夜情值10萬,不過孔子說食色性也,我去慰他籍千年的寂寞,他也一定是很高興的。”

    解讀: 不知道白居易知道有這樣的后人會(huì)不會(huì)氣的從棺材里爬出來。想出名,不是壞事。但是甩個(gè)大臉沾著祖宗的光還說勾引誰誰誰這樣的話就有點(diǎn)讓人倒胃口了。

    4、饒穎性愛日記

    饒大媽數(shù)年如一日地死纏猛打央視撥陰員趙老濕,起因據(jù)說是趙老濕舍不得給饒穎3800塊錢,哎,何必呢?早知道今天這個(gè)場面,估計(jì)后面加上三個(gè)0,趙老濕也認(rèn)了。
      
    饒 穎日記(三)節(jié)選:有幾次在一起,他用刀割我的手臂,用針沾了他的唾沫扎我的陰部,說是消毒。我痛得喊叫,他卻興奮不已地說:“寶貝,你不知道這樣做,我 有多快樂,讓我扎扎吧。”“趙忠祥虐待成性,即使我在經(jīng)期,他也要與我發(fā)生關(guān)系。我不愿意,他就罵我打我,迫使我屈服。2000年上半年,我的泌尿系統(tǒng)因 此受感染,治療不及時(shí),導(dǎo)致腎炎。”
      
    解讀:“寶貝,你不知道這樣做,我有多快樂,讓我扎扎吧。” 這哪是趙老濕,明明就是《依波拉病毒》和《人肉叉燒包》里的 黃秋生嘛!

    5、巨NB的老師

    一個(gè)女孩和同學(xué)開玩笑,把對(duì)方的衣服脫光了,后來被班主任知道了,他叫來了三方的家長。當(dāng)家長們決定不予以追究,只要對(duì)方道歉的時(shí)候,他說了:“呀,這可不得了,以前聽說也有過這樣一個(gè)例子,一個(gè)人把一個(gè)女同學(xué)的衣服脫光了,最后判了16年呢”最后那個(gè)女孩子因害怕自殺。

    解讀:終于體會(huì)到了什么叫做唯恐天下不亂?既然受害方都表示不愿再追究,為什么你要那么危言聳聽呢?傳說中的皇帝不急,你個(gè)太監(jiān)急個(gè)球啊?最后結(jié)果是:一朵鮮花又凋謝了!

    6、醫(yī)托說:揍的就是院長!

    2006年11月23日,復(fù)旦大學(xué)附屬眼耳喉鼻醫(yī)院院長助理、浦東分 院院長:張?zhí)煊钤诮掖┽t(yī)托的把戲后,遭到了一群醫(yī)托群毆。此 時(shí)張?jiān)洪L大呼:我是醫(yī)院院長!為首的一個(gè)醫(yī)托答曰:揍的就是 院長!

    解讀:以前在我們眼里,醫(yī)托都是偷偷摸摸的,像做賊一樣(本來就是做賊),現(xiàn)在你看看,時(shí)代進(jìn)步了,社會(huì)發(fā)展了,醫(yī)托也翻身得解放了,還能說出那樣天地驚,鬼神泣的話!可以肯定是醫(yī)托史上最NB的。

    7、蘇丹紅鴨蛋吃不死人,放心吧

    北京市食品辦專家:“按每個(gè)鴨蛋約60克進(jìn)行折算,體重60公斤的成人每天食用1200多個(gè)“涉紅鴨蛋”,才有可能達(dá)到誘發(fā)動(dòng)物腫瘤的劑量。”

    解讀:食 品辦專家原來一直在以人的體重與有毒食物食用量之比,作為他們工作的指導(dǎo)思想。你吃了毒木耳嗎?專家可以告訴你:按多少多少克進(jìn)行折算,體重60公斤的成 年人每天食用1噸,“才有可能達(dá)到誘發(fā)動(dòng)物腫瘤”。你吃了毒豬肉嗎?你吃了毒韭菜嗎?你吃了毒大米嗎?你吃了含有蘇丹紅Ⅰ號(hào)的廣東亨氏美味源辣椒醬、肯德 基新奧爾良烤翅嗎?吃吧,放心地吃吧,死不了。

    8、北大教授阿憶:“在北大月收入4786元,靠學(xué)校那點(diǎn)工資很難生存和安心教學(xué)。”

    解讀:幸虧阿憶教授還有幾個(gè)兼差,要不怎么能在“哭窮”之際,又在中關(guān)村附近新購置了一套豪宅,“300萬差1萬”。

    9、教育好比逛市場?

    教育部新聞發(fā)言人王旭明:“教育就好比逛市場買東西,如果有錢,可以去買1萬元一套的衣服;如果沒錢,就只能去小店,買100元一套的衣服穿。”

    解讀:許多國家的教育部門,都鼓勵(lì)年輕人勇于追逐自己的夢想,鼓勵(lì)年輕人突破自我,進(jìn)入更高的層次、更好的學(xué)校深造,不想當(dāng)將軍的士兵不是好士兵,不想上哈佛的學(xué)生不是好學(xué)生。可我們的教育部門竟然對(duì)年輕人說:要考慮自己的經(jīng)濟(jì)能力,要有自知之明……

    10、社會(huì)學(xué)家鄭也夫:“自來水100元一噸保證可持續(xù)洗澡”。

    解讀:鄭 老師說得很有道理,他算了賬:瓶裝礦泉水每瓶500—600毫升,1.5元一瓶。一噸瓶裝礦泉水3000元。罐裝飲用水一罐19升,大約10元多一罐。一 噸罐裝飲用水550元。一噸自來水100元離譜嗎?商人忽悠您買罐裝水可以,自來水提價(jià)就不行?即使按照這個(gè)價(jià)格算,吃三根冰棍的價(jià)格(3元錢),就能淋 浴一次(淋浴龍頭開4分鐘大約用水30升)。為什么淋一次浴就一定要比吃三根冰棍便宜?

    posted @ 2006-12-06 20:31 小小涼粉 閱讀(296) | 評(píng)論 (0)編輯 收藏

    從灰姑娘變成公主,和生下來就是公主,畢竟不一樣,前者不會(huì)有后者的單純,但也不會(huì)像后者那樣容易受傷。

    ?

    見到張靚穎的那刻,屋子里人非常多,她一個(gè)箭步?jīng)_向沙發(fā),一把將頭頂上的報(bào)童帽丟到桌子上,嘰里呱啦地和公司相熟的同事攀談起來,語速快得驚人,,像個(gè)孩子般手舞足蹈。其間,還以非同尋常的速度干掉了一整瓶鮮橙多。

    ?

    經(jīng)同事提醒,她才發(fā)現(xiàn)了我,于是規(guī)規(guī)矩矩坐過來,重新將雙手縮到長袖衣服的袖管中,語速變得緩慢,神情收斂,一下子就變成另外一個(gè)樣子。

    ?

    在廈門某酒吧舉行的“涼粉”與張靚穎的見面會(huì)上,“涼粉”手牽手,用人墻把所有記者都隔離起來,不讓記者靠近張靚穎,他們警告媒體記者,不要影響到他們的 “公主”。緊接著,在廈門國際馬拉松發(fā)令式的媒體見面會(huì)上,張靚穎到場,同時(shí)到場的還有大批“涼粉”,其中一位義正詞嚴(yán)“警告”記者說:“不要問八卦問題,我們已經(jīng)不是傳統(tǒng)意義上的粉絲,靚穎也不是傳統(tǒng)意義上的明星。”

    ?

    在這次采訪前,到百度張靚穎吧上收集問題,也收到了同樣的警告——“她已經(jīng)把最美的歌聲給了我們,站在這個(gè)舞臺(tái)上忍受了很多傷害,所以,我們把生活還給她。鄭重對(duì)你說,如果你是善良的,請(qǐng)不要問她私生活。她的性格很倔,如果你問了,而她的態(tài)度不好,我們只會(huì)鼓掌支持她。”

    ?

    FANS 對(duì)張靚穎的維護(hù)已經(jīng)到了無以復(fù)加的地步,盡管許多人認(rèn)為,不少?zèng)龇蹖儆谥挟a(chǎn)精英男士,他們大多低調(diào)——但低調(diào)不代表無聲,連張靚穎都說,“現(xiàn)在‘玉米’和‘盒飯’更瘋狂?我沒有覺得啊 ! 我的粉絲也很熱情” FANS 愛上的是和他們某些地方很相似的張靚穎,雖然看起來平平靜靜,但遇弱則柔,遇強(qiáng)則剛。就像前不久,她“斗膽”以一個(gè)剛出茅廬的歌手身份將上海某著名媒體一紙?jiān)V狀告上法庭,理由是她認(rèn)為該媒體侵害了她的名譽(yù)權(quán)。

    ?

    事實(shí)上,早在去年超女比賽中,她的“戰(zhàn)斗”就開始了。在那樣一個(gè)比賽中,嗓音一流的張靚穎遭遇到一種她從未經(jīng)歷過的尷尬,那就是:她唱得再好,也得不到冠軍。雖然我們得不到證實(shí),但她一定心里明白,這就是所謂的游戲規(guī)則。她的失落逐步變成了“孤傲”,被稱為“自信得無可救藥”,評(píng)委旁敲側(cè)擊,暗示她心機(jī)過重,甚至故意避而不談她的演唱實(shí)力。而這個(gè)早早就經(jīng)歷過風(fēng)浪的女孩,也從怯怯接受變?yōu)橛幸膺€擊。比如,其中一場比賽中她唱完后,評(píng)委輪番向她發(fā)問:“你有沒有感冒?發(fā)燒?生病?狀態(tài)不佳?”張靚穎響亮回應(yīng):“我沒有生病,我的狀態(tài)非常好。”

    ?

    正是這種直接,使得喜歡與不喜歡她的人截然分派。

    ?

    愛她的叫她公主。

    ?

    不與媒體為敵,她是個(gè)天生的藝人,懂得圓熟地閃避危險(xiǎn)。

    ?

    網(wǎng)上有個(gè)流傳頗廣的帖子《不穿水晶鞋也能成為公主》中寫到過一段她幼年時(shí)的經(jīng)歷,大概意思是小學(xué)時(shí)候她參演童話劇《灰姑娘》,劇情需要她試穿水晶鞋,她卻擅自改了臺(tái)詞,高喊著“謝謝你,我不穿 ! ”使童話劇草草收?qǐng)?當(dāng)我問道她這個(gè)情節(jié)時(shí),她卻一臉茫然:“沒有吧,我怎么不記得我這樣干過。”緊接著她又打圓場說,“你知道嘛,許多 FANS 喜歡憑著美好的想象編故事,讓我在其中變得很美,事實(shí)上,我可沒有那么大膽 ! 小時(shí)候一直惟‘母命’是從,不敢吭氣,做錯(cuò)了事,媽媽是真會(huì)下狠手教訓(xùn)我的 !

    ?

    很乖,懂事,很早就學(xué)會(huì)堅(jiān)強(qiáng),還是也難捱娛樂圈的殘酷,她在博客上寫:“進(jìn)入娛樂圈前,許多人提醒我要提防不良娛記……進(jìn)入娛樂圈幾個(gè)月,我已經(jīng)見識(shí)了他們的高深道行,他們可不是落井下石,而是路上挖井,再用無敵幻化緋聞?wù)茖⒛愦蛉氲鬲z……”幾次公開落淚,卻為她贏得更多感動(dòng),從不適應(yīng)到接受、消化和享受成名帶來的樂趣,她變得越來越從容。畢竟,從灰姑娘變成公主,和生下來就是公主的人木不一樣的,前者不會(huì)有后者的單純,但也不會(huì)像后者那樣容易受傷。

    ?

    事實(shí)上,張靚穎并不是一個(gè)與媒體為敵的人,她是一個(gè)天生的藝人,懂得圓熟地閃避危險(xiǎn)發(fā)揮長項(xiàng),有人說她單純,的確有些牽強(qiáng)。采訪中,在很多問題上,她都表現(xiàn)出了相當(dāng)成熟的特質(zhì)。比如,官司到現(xiàn)在尚未水落石出,提及此事她淡淡地說:“我已經(jīng)把所有事都交給公司去做了,自己現(xiàn)在只是專心致志錄專輯。”比如,當(dāng)被問到參加超女比賽成功除了實(shí)力和人氣以外還有什么其它因素時(shí),她哈哈大笑:“當(dāng)然是運(yùn)氣了 ! ”而被追問平凡人如何才能有“好運(yùn)氣”,是否有“潛規(guī)則”才在時(shí),她眼珠一轉(zhuǎn),很無辜:“我怎么知道,運(yùn)氣啦,神鬼莫測的,誰能清楚它的走向呢?”問她,什么事會(huì)引起她的不快,她很斬釘截鐵地說:“嗯,如果你不按照我今天說的來寫,我就會(huì)不開心。”

    ?

    其實(shí),她在采訪中所表現(xiàn)出的敏捷、大方,雖心存抗拒和抵觸卻幾乎不露痕跡,比起在娛樂圈摸爬滾打多年的藝人甚至是一線大牌來,都要漂亮和得體的多。

    ?

    關(guān)于新專輯, FANS 有個(gè)很大的呼聲,那就是——強(qiáng)烈需要口水歌,她拖長了聲回答:“有,讓他們放心,一定有 ! ”可緊接著問她什么是口水歌時(shí),她突然搖頭,“不知道,因?yàn)檎f不好,一個(gè)人一個(gè)定義吧。比如某首歌,有人覺得是口水歌,別人也許不這么認(rèn)為,覺得很有內(nèi)涵啊。”

    ?

    “不知道 + 因?yàn)椤?/span> ( 一長串的解釋 ) ”一定程度上成了她回答問題的模式,她在這個(gè)過程中,盡量尋找兩全其美的答案。 FANS 不擇生熟的狂熱擁躉 VS 希望她至少有一首“口水歌”,原本就是一個(gè)矛盾,應(yīng)該如何選擇自己的定位?張靚穎想了想,依舊是:“不知道,但我在很用心地唱歌,很努力地為大家呈現(xiàn)一個(gè)多元華的自己。”

    ?

    于是新專輯出現(xiàn)了一個(gè)很有趣的現(xiàn)象:英文歌和中文歌并存,歡快的舞曲和憂傷的抒情并存,翻唱與原唱并存,炫耀聲線的陽春白雪和瑯瑯上口的下里巴人并存。

    ?

    厭她的人吹毛求疵。

    ?

    身陷娛樂圈,就免不了被折騰,她知道在恰當(dāng)時(shí)候自娛娛人。

    ?

    現(xiàn)在在成都,只要對(duì)出租車司機(jī)說“去張靚穎唱歌的酒吧”,司機(jī)就能徑直把你拉到玉林生活廣場,那里的音樂房子和空瓶子都是她唱過歌的酒吧。但是成名帶給她的不只是“成名”,一路 PK 擺脫了平民身份的張靚穎不知怎么的,她的名字就和一些男女有了瓜葛,先是一位自稱好友的人大曝張靚穎以前的情史,還言之鑿鑿地稱她曾為某 男友自殺,后有與某教授關(guān)系曖昧;不久后,

    張靚穎又成了黃健翔離婚的直接“殺手”,接下來再是訪談中談到欣賞姚明便被傳為“想借大個(gè)子炒作”,然后是劉翔駁了她的面子沒能參加她親手送上票的演唱會(huì),有人跳出來說:“張靚穎,請(qǐng)別坑害劉翔 ! ”再到后來,又有所謂她曾經(jīng)的“閨中密友”出來編排她翻臉不認(rèn)人的不是……鬧到眼前,以身兼在校自考生和當(dāng)紅歌星兩重身份參加四川大學(xué) 110 年校慶的張靚穎,依舊被指指點(diǎn)點(diǎn),理由就是,她是自考生,能算校友嗎?一批網(wǎng)友忿忿然:張靚穎何德何能參加校慶?學(xué)校不以學(xué)術(shù)成就宣傳自己,卻讓一個(gè)不合格的逃學(xué)藝人為自己貼金,可恥呀可恥 !

    ?

    被放在更大的舞臺(tái)上,需要的是歌唱以外的實(shí)力。

    ?

    面對(duì)紛擾,張靚穎只是淡淡地說:“我?guī)缀醪簧暇W(wǎng)看這些,每天回家很晚,電視也懶得看,從美國帶回來的那些 CD 都沒來得及仔細(xì)聽,現(xiàn)在每一天雷打不動(dòng),就剩下洗澡,打開計(jì)算機(jī)連連看,等頭發(fā)干,然后睡覺。”

    ?

    而半年前,當(dāng)記者提及爭議和緋聞時(shí)她說:“娛樂圈都是這樣,圈子里沒有誰能逃過這些,這個(gè)怎么說呢,也算是一種規(guī)矩了。”從哭泣、氣憤,到拾了隱身草,閉眼不理麻煩事,張靚穎已經(jīng)學(xué)會(huì)為自己排解煩惱。

    ?

    不過有一件事她倒是很豁達(dá),那就是一直被攻擊的造型問題。討厭她的人特別喜歡揪住“不會(huì)打扮”這一點(diǎn)不放,而她自己這次卻也從了眾:“穿衣服這件事,我真是搞不懂,我就喜歡穿的特隨便,而且又倔又懶。每次出席什么場合,都應(yīng)該是帶幾身衣服讓造型師挑選,而我經(jīng)常就帶一身,讓他們沒的挑。公司 12 歲生日那天,我本來沒穿那條隆重的黑裙子,只是白襯衫牛仔褲過來了,到場便傻眼了,因?yàn)樵趫龅墓ぷ魅藛T工作服就是白襯衫牛仔褲。還有去年超女比賽時(shí)有一套衣服,一開始我死活不想穿,和造型師打了半天架,最后拗不過只能穿了,結(jié)果到現(xiàn)在都被大家說那時(shí)最漂亮的一身,你說我審美是不是有問題啊?”

    ?

    走紅,自然會(huì)有負(fù)面新聞不斷找上來。“我忘性很大,基本上屬于雜草型,哭完就沒事了。”張靚穎的智慧之處在于,她懂得在恰當(dāng)?shù)臅r(shí)候自娛娛人。娛樂圈就是名利場,明星就是金魚,老百姓是看客。誰要是嫌看熱鬧還不夠過癮,自己跳進(jìn)水里一起撲騰,那就真是典型的“無極”了,對(duì)于“無極”之人,她最終選擇了不予理會(huì)。

    posted @ 2006-11-16 12:07 小小涼粉 閱讀(303) | 評(píng)論 (0)編輯 收藏

    目的1:打開一個(gè)新的對(duì)話框時(shí),如何設(shè)定它和父對(duì)話框的相對(duì)位置?比如在登錄對(duì)話框有一個(gè)“創(chuàng)建新帳號(hào)”的按鈕,用戶點(diǎn)擊以后,就出現(xiàn)新的對(duì)話框用于注冊(cè),請(qǐng)問如何能讓新的對(duì)話框和舊對(duì)話框排列的整齊一些?應(yīng)該是能設(shè)定二者的相對(duì)位置吧?

    最開始,以為要用Shell.setLocation來設(shè)置,但是對(duì)于一個(gè)Dialog而言,它的Shell在什么時(shí)候才能初始化呢?

    我 在構(gòu)造函數(shù)里面,configureShell(Shell newShell)方法里面,Control createDialogArea(Composite parent)方法里面都調(diào)用過了this.getShell方法想得到當(dāng)前的Shell,結(jié)果都拋出空指針異常....

    后來看書發(fā)現(xiàn),應(yīng)該重寫protected Point getInitialLocation(Point initialSize)方法

    比如,在最開始的例子中,在第二個(gè)對(duì)話框中我重寫了該方法,代碼如下:

    protected?Point?getInitialLocation(Point?initialSize)?{
    ????????Point?location?
    =?new?Point(this.getParentShell().getLocation().x
    ????????????????
    +?this.getParentShell().getBounds().width,?this
    ????????????????.getParentShell().getLocation().y
    ????????????????
    +?this.getParentShell().getBounds().height
    ????????????????
    -?this.getInitialSize().y);
    ????????
    return?location;
    ????}


    其結(jié)果就是兩個(gè)對(duì)話框底部對(duì)齊的平行排列:)

    目的2: 登陸對(duì)話框要記住上次的位置。

    想了半天,好像只能用IPreferenceStore來做了,在繼承了AbstractUIPlugin的類中放入兩個(gè)常量:

    ????public?static?final?String?LOGINDIALOG_POSITION_X?=?"LOGINDIALOG_POSITION_X";

    ????
    public?static?final?String?LOGINDIALOG_POSITION_Y?=?"LOGINDIALOG_POSITION_Y";

    然后重寫兩個(gè)方法:

    ????@Override
    ????
    protected?Point?getInitialLocation(Point?initialSize)?{

    ????????String?xposition?
    =?preferenceStore
    ????????????????.getString(Peer68TPlugin.LOGINDIALOG_POSITION_X);
    ????????String?yposition?
    =?preferenceStore
    ????????????????.getString(Peer68TPlugin.LOGINDIALOG_POSITION_Y);
    ????????
    if?(xposition?==?null?||?yposition?==?null || xposition == ""
    ??? ??? ??? ??? || yposition == ""
    )?{
    ????????????
    return?super.getInitialLocation(initialSize);
    ????????}?
    else?{
    ????????????
    return?new?Point(Integer.parseInt(xposition),?Integer
    ????????????????????.parseInt(yposition));
    ????????}
    ????}

    ????@Override
    ????
    public?boolean?close()?{
    ????????preferenceStore.setValue(Peer68TPlugin.LOGINDIALOG_POSITION_X,?
    this
    ????????????????.getShell().getLocation().x);
    ????????preferenceStore.setValue(Peer68TPlugin.LOGINDIALOG_POSITION_Y,?
    this
    ????????????????.getShell().getLocation().y);
    ????????
    return?super.close();
    ????}

    大功告成!

    posted @ 2006-11-08 15:23 小小涼粉 閱讀(2207) | 評(píng)論 (0)編輯 收藏

    1. The Maven Command:

    mvn?archetype:create
    -DarchetypeGroupId=org.springframework.osgi
    -DarchetypeArtifactId=spring-osgi-bundle-archetype
    -DarchetypeVersion=1.0-SNAPSHOT
    -DremoteRepositories=http://static.springframework.org/maven2-snapshots
    -DgroupId=maventest
    -DartifactId=maventest
    -Dversion=1.0.0


    2. After the project is successfully created, please add the following repositories to the POM


    ?
    <repository>
    ???
    <id>?springframework.org?</id>
    ???
    <name>Springframework?Maven?SNAPSHOT?Repository</name>
    ???
    <url>?http://static.springframework.org/maven2-snapshots/?</url>
    ?</repository>?????????????????
    ???????????????????????
    ?
    <repository>????????????????????????????????????????
    ???
    <id>safehaus-repository</id>???????????????????????
    ???
    <name>Safehaus?Repository</name>???????????????????
    ???
    <url>http://m2.safehaus.org?</url>??????????????????
    ?</repository>?

    3. run "mvn compile", everything is ok! :-)

    Thanks for the help of every guys。

    posted @ 2006-10-31 21:41 小小涼粉 閱讀(1650) | 評(píng)論 (0)編輯 收藏

    				

    posted @ 2006-10-30 11:58 小小涼粉 閱讀(265) | 評(píng)論 (0)編輯 收藏

    第一個(gè)評(píng)價(jià)是來自于我前年冬天的博客,第二個(gè)評(píng)價(jià)是來自于我01年的一篇文章----差別還可以.....

    小小涼粉,您的總體評(píng)價(jià):

    文字的平民化韻味濃郁,具有很強(qiáng)的生活氣息;相對(duì)正統(tǒng)的創(chuàng)作路線,可讀性較強(qiáng)。架構(gòu)清晰,邏輯性強(qiáng),情節(jié)縝密,可讀性強(qiáng);文章內(nèi)容豐富,觀點(diǎn)翔實(shí)可圈可點(diǎn);在用詞范圍方面可以著重下功夫改進(jìn)。情節(jié)縝密題材的小說值得嘗試,將推理、懸念、歷史的因素?fù)诫s其中;同時(shí)也可以嘗試雜文、評(píng)論等文體。行文時(shí)留心描寫與情節(jié)結(jié)構(gòu)的緊密配合,必然會(huì)誕生令人耳目一新的作品。


    小小涼粉,您的測算結(jié)果:

    通過測算,您的文章與知名作家的相似度比較結(jié)果見下:

    王安憶
    27%
    沒有想到吧,你有這位作家那么一點(diǎn)點(diǎn)的味道喲。
    張小嫻
    25%
    沒有想到吧,你有這位作家那么一點(diǎn)點(diǎn)的味道喲。
    鄭淵潔
    11%
    如果不是我們科學(xué)的分析結(jié)果,你沒有發(fā)覺自己還有些許這位作家的風(fēng)格吧^_^

    小小涼粉,您的總體評(píng)價(jià):

    古風(fēng)古韻的味道,古色古香的文字。架構(gòu)清晰,邏輯性強(qiáng),情節(jié)縝密,可讀性強(qiáng);文章內(nèi)容豐富,觀點(diǎn)翔實(shí)可圈可點(diǎn);在用詞范圍方面可以著重下功夫改進(jìn)。情節(jié)縝密題材的小說值得嘗試,將推理、懸念、歷史的因素?fù)诫s其中;同時(shí)也可以嘗試雜文、評(píng)論等文體。行文時(shí)留心描寫與情節(jié)結(jié)構(gòu)的緊密配合,必然會(huì)誕生令人耳目一新的作品。


    小小涼粉,您的測算結(jié)果:

    通過測算,您的文章與知名作家的相似度比較結(jié)果見下:

    古龍
    17%
    這個(gè)區(qū)間是比較正常的,看來你已經(jīng)有了掌握神韻的感覺喔。
    張小嫻
    13%
    如果不是我們科學(xué)的分析結(jié)果,你沒有發(fā)覺自己還有些許這位作家的風(fēng)格吧^_^
    錢鐘書
    8%
    如果不是我們科學(xué)的分析結(jié)果,你沒有發(fā)覺自己還有些許這位作家的風(fēng)格吧^_^

    posted @ 2006-10-26 18:10 小小涼粉 閱讀(303) | 評(píng)論 (0)編輯 收藏

    Sailor?? 罵的,真騷,用英語聊個(gè)P啊
    小刀?? 是啊
    小刀?? 你真騷?
    Sailor? 你更騷
    Sailor? 你最騷
    小刀?? 你最騷
    小刀?? 你是騷上加騷
    Sailor? 騷!
    小刀?? 別忘了,是你先說英語的!
    Sailor? 誰讓你跟著說來著
    小刀?? 所以最騷的是你
    Sailor? 你是跟騷!
    小刀?? ok,沒問題,反正你最騷

    posted @ 2006-10-26 17:29 小小涼粉 閱讀(247) | 評(píng)論 (0)編輯 收藏

    首唱會(huì)上,靚穎還唱了光芒,她第一張EP的主打歌。她說這首歌正是她彼時(shí)的心里話,“謝謝你一直陪在我的身旁”。當(dāng)人們擁 有高度的物質(zhì)文明時(shí),回眸一顧,精神家園卻已花果飄零。于是當(dāng)這個(gè)堅(jiān)強(qiáng)自信、勇敢執(zhí)著、珍愛友誼的東方女孩出現(xiàn)的時(shí)候,我們心甘情愿,陪她一同面對(duì)艱難、 挫折、成功、喜悅。?

    當(dāng)靚穎獨(dú)自一人站在高臺(tái)上,說這首歌使她決心成為一個(gè)好歌手 的時(shí)候,我們都知道是什么,已經(jīng)有人喊出了《Hero》。當(dāng)她從高臺(tái)上跳下的時(shí)候,當(dāng)熟悉的旋律響起來,全場靜默。我敢說這時(shí)候一定有人在熱淚盈眶。一曲 結(jié)束的時(shí)候,她將手抬起,伸出食指,指向臺(tái)下的涼粉,然后深深一躬。?

    所有靚穎的Hero版本——也許是因?yàn)檫@是我第一次聽見現(xiàn)場——我覺得最為震撼——靚穎在動(dòng)情。?

    我在想什么?我在想,靚穎一路走來,并非青云直上,一帆風(fēng)順。沉沉黑夜里,有一步步深深淺淺的腳印。然而勇者無懼,寂寂風(fēng)中,有涼粉舉燭相伴,成就靚穎今夜的The?One。所以,從《光芒》到《英雄》,才是那樣感天動(dòng)地,蕩氣回腸!?

    那時(shí)候她在想什么?她一定想起小時(shí)候聽著卡帶的情景,想起參加超女中的種種,想起所有涼粉的陪伴,讓她有勇氣追求自己的夢想。所以,仔細(xì)去看,她跳下高臺(tái) 的表情和步履是那樣的義無反顧,走向涼粉的表情和步履同樣是那樣義無反顧。她被我們奉為“英雄”,她又把“英雄”送給了我們。?

    而我們——在臺(tái)下?lián)]舞熒光棒的涼粉、守在電腦前不肯離去的涼粉——風(fēng)霜雨雪中,永遠(yuǎn)是為英雄守候的身影,為靚穎擔(dān)待的脊梁!

    posted @ 2006-10-19 09:07 小小涼粉 閱讀(309) | 評(píng)論 (0)編輯 收藏

    首先是一個(gè)效果圖:

    login.JPG

    為了不違反保密協(xié)議,偶在這里把logo和相關(guān)的東西都涂掉了,希望不會(huì)讓人覺得難看....

    ok,下面就開始講述偶的coding過程:

    首先捏,Dialog是分為三部分的,Window Title Bar,Content Area和Button Bar

    這里的Window Title Bar素很難改動(dòng)滴,偶也米改....而接下來的ContentArea和ButtonBar因?yàn)樗胤殖蓛山氐危跃鸵岩粡埍尘皥D片拆成兩截,分別設(shè)置成ContentArea和ButtonBar的背景圖片鳥~~~
    ????protected?Control?createDialogArea(Composite?parent)?{
    ??????? Composite?composite?=?(Composite)?super.createDialogArea(parent);
    ????????composite.setBackgroundImage(backgroundImage);
    ??????? .......
    ??? }

    ??? protected?Control?createButtonBar(Composite?parent)?{
    ??????? Control?composite?
    =?super.createButtonBar(parent);
    ????????composite.setBackgroundImage(backgroundBtmImage);
    ??????? .......
    ???????
    return?composite;
    ????}

    當(dāng)然,僅僅做到這些還是遠(yuǎn)遠(yuǎn)不夠滴,不信,你看~~~

    login2.JPG

    看到效果了咩....接下來偶們要做滴就是解決掉背景的問題,因?yàn)檫@個(gè)對(duì)話框里面沒有Table、Tree之類的控件,于是在createDialogArea()方法中加入一行:

    composite.setBackgroundMode(SWT.INHERIT_DEFAULT);

    我們?cè)賮砜纯锤淖兒蟮男Ч?br />
    login3.JPG

    如上圖所示,介個(gè)ContentArea的背景問題已經(jīng)解決鳥,下面就素重中之重滴ButtonArea鳥~~~讓我們打開Dialog的源代碼,看一下createButtonBar()的部分,就可以發(fā)現(xiàn)里面有兩行:

    ????????GridData?data?=?new?GridData(GridData.HORIZONTAL_ALIGN_END
    ????????????????
    |?GridData.VERTICAL_ALIGN_CENTER);
    ????????composite.setLayoutData(data);

    介樣子怎么能行捏,偶們需要讓介個(gè)Composite填滿整個(gè)DialogArea,這樣子才可以顯示出整個(gè)背景圖片,所以偶們就要在重寫后的方法中加入下面一行代碼:

    composite.setLayoutData(new?GridData(SWT.FILL,?SWT.TOP,?false,?false));

    現(xiàn)在讓偶們?cè)賮砜纯催\(yùn)行后的結(jié)果:

    login4.JPG

    為什么會(huì)素介個(gè)樣子捏?即使素把layout改成SWT.RIGHT,也不會(huì)改變介個(gè)結(jié)果...偶快要郁悶滴抓狂鳥.....

    經(jīng)過漫長滴測試,偶終于發(fā)現(xiàn)鳥,如果控件滴layoutData不grabExcessSpace的話,那么現(xiàn)在滴DialogArea的Composite實(shí)際大小就素兩個(gè)Button加起來滴大小,所以無論如何也素不會(huì)居右對(duì)齊滴....介可怎么辦捏.....如果去重寫createButton方法滴話,那介個(gè)dialog滴代碼可就太丑陋鳥....

    在一個(gè)偶然滴機(jī)會(huì)下,偶終于發(fā)現(xiàn)鳥SWT.RIGHT_TO_LEFT !!!偶依稀見到鳥燦爛滴曙光!8過Composite的style素在創(chuàng)建時(shí)指定的,似乎米辦法在后面覆蓋,所以偶們只好整個(gè)滴把createButtonBar重寫掉鳥~~~

    ????protected?Control?createButtonBar(Composite?parent)?{
    ????????Composite?composite?
    =?new?Composite(parent,?SWT.RIGHT_TO_LEFT
    ????????????????
    |?SWT.NONE);
    ????????
    //?create?a?layout?with?spacing?and?margins?appropriate?for?the?font
    ????????
    //?size.
    ????????GridLayout?layout?=?new?GridLayout();
    ????????layout.makeColumnsEqualWidth?
    =?true;
    ????????layout.marginWidth?
    =?convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
    ????????layout.marginHeight?
    =?convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
    ????????layout.horizontalSpacing?
    =?convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
    ????????layout.verticalSpacing?
    =?convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
    ????????layout.marginLeft?
    =?10;
    ????????composite.setLayout(layout);
    ????????GridData?data?
    =?new?GridData(SWT.FILL,?SWT.TOP,?false,?false);
    ????????composite.setLayoutData(data);
    ????????composite.setFont(parent.getFont());

    ????????
    //?Add?the?buttons?to?the?button?bar.
    ????????createButtonsForButtonBar(composite);
    ??????? composite.setBackgroundImage(backgroundBtmImage);
    ????????
    return?composite;
    ????}

    在上面的代碼中,偶除了對(duì)偶所提到的地方進(jìn)行了修改以外,還加上鳥一行: layout.marginLeft?=?10;

    介個(gè)素因?yàn)槿绻疫吘噙^小滴話,背景圖片就會(huì)被覆蓋掉一些,而因?yàn)榕紓冇玫进B
    SWT.RIGHT_TO_LEFT,所以應(yīng)當(dāng)設(shè)置marginLeft滴值 :-)

    還有一點(diǎn)素8能忘記滴,就素要重寫一下setButtonLayoutData(Button button)方法,因?yàn)榕紓円袯utton改成居右對(duì)齊:

    ????protected?void?setButtonLayoutData(Button?button)?{
    ????????GridData?data?
    =?new?GridData(SWT.RIGHT,?SWT.CENTER,?false,?false);
    ????????
    int?widthHint?=?convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
    ????????Point?minSize?
    =?button.computeSize(SWT.DEFAULT,?SWT.DEFAULT,?true);
    ????????data.widthHint?
    =?Math.max(widthHint,?minSize.x);
    ????????button.setLayoutData(data);
    ????}

    然后再在createButtonsForButtonBar()方法中,把創(chuàng)建按鈕的順序改變一下,偶們就可以看到最開始滴那張美麗滴對(duì)話框鳥~~~雖然被偶涂改滴有些不美麗鳥~~~

    現(xiàn)在還有個(gè)小小滴問題就素按鈕距離底端滴黑框太近鳥~~介個(gè)素因?yàn)椋閭€(gè)Composite只有一行,所以要改變按鈕距離底端滴距離,那么DialogArea滴大小就要跟著改變,而現(xiàn)在偶們滴DialogArea所需要滴背景圖片還米改好,于是只有這樣鳥~~~大家應(yīng)該知道在哪里設(shè)置底邊的邊距吧?就素createButtonBar方法中滴那個(gè)layout.marginHeight =xxx :)

    最后別忘了,整個(gè)對(duì)話框的高度,應(yīng)該是Window Title Bar,Content Area和Button Bar三部分滴和。

    偶已經(jīng)說完鳥,如果覺得偶滴介篇文章對(duì)你有些幫助的朋友,請(qǐng)去支持一下偶們美麗可愛滴靚穎同學(xué)滴新專輯The One吧:)多謝!

    posted @ 2006-10-16 18:11 小小涼粉 閱讀(4204) | 評(píng)論 (12)編輯 收藏

    IWorkbenchPreferenceConstants中有很多常量,用來配置preference settings,諸如:

    OPEN_NEW_PERSPECTIVE——打開新視圖的方式
    DOCK_PERSPECTIVE_BAR——鎖定
    PerspectiveBar的位置
    INITIAL_FAST_VIEW_BAR_LOCATION——表示fast view bar在一個(gè)fresh workspace中鎖定的位置,This preference is meaningless after a workspace has been setup, since the fast view bar state is then persisted in the workbench
    SHOW_TRADITIONAL_STYLE_TABS——表示是否在editor和view上顯示傳統(tǒng)的tab style
    SHOW_PROGRESS_ON_STARTUP——是否在啟動(dòng)時(shí)顯示progress
    SHOW_TEXT_ON_PERSPECTIVE_BAR——是否在PerspectiveBar上顯示文字

    等等......

    更改的時(shí)候
    在RCP中的plugin.xml里,使用preferenceCustomization屬性,例如:
    CODE:

    <extension
    id="someproduct"
    point="org.eclipse.core.runtime.products">
    <product
    ? application="com.example.someproduct.application"
    ? name="Some Product">
    ? <property
    ??? name="preferenceCustomization"
    ??? value="plugin_customization.ini"/>

    然后在ini文件中進(jìn)行對(duì)應(yīng)的設(shè)置

    或者,
    PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,false);

    posted @ 2006-10-08 10:04 小小涼粉 閱讀(1248) | 評(píng)論 (1)編輯 收藏

    先說一下AOSD的起源吧

    傳統(tǒng)的軟件工程有一個(gè)不變的主題:對(duì)關(guān)注點(diǎn)的分解和局部化。將系統(tǒng)分解成為主要的功能模塊,識(shí)別出關(guān)注點(diǎn)的其他問題,確保所有關(guān)注點(diǎn)的問題都能在代碼的適當(dāng)位置得到解決。但是關(guān)注點(diǎn)的分散和混雜又給代碼編寫和后期維護(hù)帶來了很大的難度。
    因此,必須有一種方法可以把關(guān)注點(diǎn)集中在一起,讓系統(tǒng)開發(fā)者可以使用關(guān)注點(diǎn)自身的模塊來描述每個(gè)關(guān)注點(diǎn)的行為。
    AOSD,用以尋找軟件系統(tǒng)中新的模塊化特性,允許對(duì)系統(tǒng)中多個(gè)關(guān)注點(diǎn)進(jìn)行獨(dú)立描述,同時(shí)又能自動(dòng)統(tǒng)一到系統(tǒng)中。

    然后是一些常用的術(shù)語(from AOSD wiki):

    concern(關(guān)注點(diǎn)):A concern is an area of interest or focus in a system. Concerns are the primary criteria for decomposing software into smaller, more manageable and comprehensible parts that have meaning to a software engineer.

    crosscutting(橫切):Note that crosscutting is a relationship between representations of concerns. Note also that it is a symmetric relationship. Therefore, if:

    1. A is a representation of one a concern,
    2. B is a representation of another concern, and
    3. A crosscuts B,

    then B also crosscuts A.

    This means that the term "crosscutting concerns" is often misused in two ways: To talk about a single concern, and to talk about concerns rather than representations of concerns. Consider "synchronization is a crosscutting concern": we don't know that synchronization is crosscutting unless we know what it crosscuts. And there may be representations of the concerns involved that are not crosscutting.

    aspect(方面):Aspects are one kind of concern in software development.

    joint point(聯(lián)接點(diǎn)):Join points are those elements of the programming language semantics which the aspects coordinate with. Nowadays, there are various join point models around and still new under development. They heavily depend on the underlying programming language and AO language.

    In a number of presently available AOP languages, a join point is a region in the dynamic control flow of an application. Thus a join point can for instance represent

    * a call to a method,
    * execution of a method,
    * the event of setting a field,
    * the event of handling an exception ...

    Join points can be picked up by an AOP program by using pointcuts to match on them. Depending on the pointcut language the AOP language provides, it may be possible to pick up more or less of those join points. Since join points are dynamic, it may be possible to expose runtime information such as the caller or callee of a method from a join point to a matching pointcut.

    advice:In a number of AOP languages, advice consists of a pointcut and a body. The body executes at join points the pointcut matches. This pointcut may expose runtime information to the advice body.

    pointcut:

    (from Without EJB):A set of join points,defined to specify when an advice should fire.Pointcuts are often described using either regular expressions or another wildcard syntax.

    (from Wiki)In a number of AOP languages, a pointcut is a predicate over dynamic join points, meaning that given a certain dynamic join point, a pointcut can either match this join point or not (at runtime). Another view of pointcuts is often, that they represent sets of join points. A pointcut may expose runtime information to a piece of advice.

    Weaving:The process of coordinating aspects and non-aspects. Weaving can be done explicitly or implicitly, and can be done at a variety of times ranging from by-hand weaving when code is written, through compile-time, post-compile time and load time, up to runtime.

    Without EJB中有個(gè)例子很好的解釋了一下上面的術(shù)語:

    public class MyBusinessObject implements BusinessObject{
    public void businessMethod1() throws UnauthorizedException{
    doSecurityCheck();
    }
    public void businessMethod2() throws UnauthorizedException{
    doSecurityCheck();
    }
    public void requiresNoSecurityCheck() {
    }
    public void doSecurityCheck() throws UnauthorizedException{
    }
    }

    這里,安全檢查就是一個(gè)aspect,需要進(jìn)行安全檢查的這幾個(gè)方法就是join point。而由于不是所有的方法都需要進(jìn)行安全檢查,所以就需要用pointcut來進(jìn)行匹配。

    下面使用了一個(gè)interceptor來將關(guān)注點(diǎn)模塊化:

    import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;

    public class SecurityInterceptor implements MethodInterceptor{
    public Object invoke(MethodInvocation invocation)throws Throwable{
    doSecurityCheck();
    return invocation.proceed();
    }
    public void doSecurityCheck{}
    }

    這里的interceptor就是advice

    posted @ 2006-09-27 23:51 小小涼粉 閱讀(271) | 評(píng)論 (0)編輯 收藏

    需要以下的對(duì)象:
    LoginDialog,用于展示狀態(tài),
    LoginListener,用于監(jiān)聽登錄狀態(tài),并根據(jù)不同的情況改變LoginDialog的顯示
    LoginAction,用于執(zhí)行登錄的業(yè)務(wù)邏輯,并且根據(jù)不同的結(jié)果來fire不同的動(dòng)作。

    狀態(tài)一共有以下幾種:
    1。登錄中
    2。登錄成功
    3。登錄失敗
    ? 3.1 連接失敗
    ? 3.2 用戶名密碼錯(cuò)誤
    ? 3.3 .....
    4。用戶取消登錄

    下面是代碼片段:

    Application;

    public?class?Application?implements?IPlatformRunnable?{
    ?
    ???
    ????
    /*
    ?????*?(non-Javadoc)
    ?????*?
    ?????*?@see?org.eclipse.core.runtime.IPlatformRunnable#run(java.lang.Object)
    ?????
    */
    ????
    public?Object?run(Object?args)?throws?Exception?{

    ????????
    try?{

    ????????????TestLoginDialog?dialog?=?new?TestLoginDialog(Display.getCurrent()
    ????????????????????.getActiveShell());
    ????????????LoginListener?loginListener?
    =?new?LoginListenerImpl(dialog);
    ????????????LoginAction?action?
    =?new?LoginAction("login");
    ????????????action.addLoginListener(loginListener);
    ????????????dialog.setLoginAction(action);

    ????????????
    if?(dialog.open()?!=?Window.OK)?{
    ????????????????
    return?IPlatformRunnable.EXIT_OK;
    ????????????}
    ????????????
    int?returnCode?=?PlatformUI.createAndRunWorkbench(display,
    ????????????????????
    new?ApplicationWorkbenchAdvisor());

    ????????????
    if?(returnCode?==?PlatformUI.RETURN_RESTART)?{
    ????????????????
    return?IPlatformRunnable.EXIT_RESTART;
    ????????????}
    ????????????
    return?IPlatformRunnable.EXIT_OK;
    ????????}?
    finally?{
    ????????????display.dispose();
    ????????}
    ????}
    }


    LoginListener:

    public?interface?LoginListener?extends?EventListener{
    ????
    public?void?loginError(String?message);

    ????
    public?void?loginComplete();

    ????
    public?void?loginCanceled();
    ????
    ????
    public?void?loginStarted();
    ????
    }


    LoginAction:這里要用到Job,因?yàn)榈卿浀倪壿嬏幚肀仨氁诋惒骄€程中來做,否則UI就會(huì)停住的。

    public?class?LoginAction?extends?Job?{
    ????
    private?LoginListener?loginListener;
    ????
    private?Session?session?=?Session.getInstance();

    ????
    public?LoginAction(String?name)?{
    ????????
    super(name);
    ????}

    ????
    public?void?addLoginListener(LoginListener?listener)?{
    ????????
    this.loginListener?=?listener;
    ????}

    ????
    public?void?fireLoginComplete()?{
    ????????loginListener.loginComplete();
    ????}

    ????
    public?void?fireLoginStarted()?{
    ????????loginListener.loginStarted();
    ????}

    ????
    public?void?fireLoginError(String?message)?{
    ????????loginListener.loginError(message);
    ????}

    ????
    public?void?fireLoginCanceled()?{
    ??? ??? //write cancel login logic here
    ????????loginListener.loginCanceled();
    ????}

    ????@Override
    ????
    protected?IStatus?run(IProgressMonitor?monitor)?{
    ????????login();
    ????????
    return?Status.OK_STATUS;
    ????}

    ????
    public?boolean?login()?{
    ????????fireLoginStarted();

    ????????if?(//網(wǎng)絡(luò)連接失敗)?{
    ???????????
    fireLoginError(Messages.getString("Session.connectionFailed"));
    ????????}?
    else?{
    ????????????
    if?(//登錄失敗)?{
    ???????????
    fireLoginError(Messages.getString("Session.loginFailed"));
    ????????????}?
    else?{
    ????????????????session.setAuthenticated(
    true);
    ????????????????fireLoginComplete();
    ??? ??? ??? ??? //處理登錄動(dòng)作
    ????????????}
    ????????}
    ????????
    return?session.isAuthenticated();
    ????}

    }


    LoginDialog:

    這里用到了StackLayout,因?yàn)樵诘卿浀倪^程中,需要在顯示用戶名/密碼的位置上,顯示gif動(dòng)畫,所以在createDialogArea的時(shí)候,要?jiǎng)?chuàng)建一個(gè)主Composite,然后將其layout設(shè)置為StackLayout,然后創(chuàng)建兩個(gè)Composite,將其parent都設(shè)置為主Composite,新創(chuàng)建的兩個(gè)我將其命名為loginInfoComposite和loginAnimaComposite,顧名思義,一個(gè)用來顯示登錄信息,一個(gè)用來顯示登錄動(dòng)畫。

    關(guān)于如何顯示gif,我在這里就不多說了,因?yàn)镾WT Snippet和Eclipse的SWT Example里面都有對(duì)應(yīng)的例子,我在這里推薦大家去參考一下SWT Example,因?yàn)槟抢锩媸怯肅anvas來繪圖的,這也是我們所需要的。

    在使用StackLayout的時(shí)候要注意,當(dāng)我們使用stackLayout.topControl = xxx的時(shí)候,還要調(diào)用stackLayout.layout()方法,否則會(huì)不起作用。

    還有就是因?yàn)樵诘卿浀倪^程中,按鈕欄應(yīng)該是不可見的,但是Dialog的getButtonBar方法是protected的,所以就重寫了這個(gè)方法,聲明為public,返回super.getButtonBar(),雖然源碼的注釋中寫著這個(gè)方法不應(yīng)該重寫,但是我想,這樣子應(yīng)該沒問題吧。

    另外,在繪制gif的下方添加一個(gè)按鈕,并且addSelectionListener,當(dāng)SelectionEvent發(fā)生的時(shí)候,就去觸發(fā)loginAction的fireCancel方法就可以了。

    細(xì)節(jié)就不描述了,下面是一些個(gè)人認(rèn)為比較關(guān)鍵的代碼片段:

    ????/*
    ?????*?to?create?login?button?
    ?????
    */
    ????
    public?static?int?LOGIN_ID?=?9527;


    ????protected?void?createButtonsForButtonBar(Composite?parent)?{
    ????????createButton(parent,?LOGIN_ID,?Messages
    ????????????????.getString(
    "LoginDialog.loginbutton"),?true);?]
    ????????createButton(parent,?IDialogConstants.CANCEL_ID,?Messages
    ????????????????.getString(
    "LoginDialog.cancelbutton"),?false);
    ????}


    ????@Override
    ????
    protected?void?buttonPressed(int?buttonId)?{
    ????????
    if?(buttonId?==?LOGIN_ID)?{
    ????????????loginPressed();
    ????????}
    ????????
    super.buttonPressed(buttonId);
    ????}


    ??? protected?void?loginPressed()?{
    ??? ??? //...
    ????????loginAction.schedule();
    ????}

    然后是LoginListener的實(shí)現(xiàn)類:

    public?class?LoginListenerImpl?implements?LoginListener?{
    ????
    private?Display?display;
    ????
    //login?dialog
    ????private?TestLoginDialog?dialog;
    ????
    //image?to?show?on?login?failed
    ????private?Image?errorMessageImage?=?AbstractUIPlugin
    ????????????.imageDescriptorFromPlugin(Application.PLUGIN_ID,
    ????????????????????IImageKeys.crodoTitleImage).createImage();
    ????
    //error?message?area?background
    ????private?Color?errorMessageBackground?=?new?Color(null,?255,?255,?0);

    ????
    public?LoginListenerImpl(TestLoginDialog?dialog)?{
    ????????
    this.dialog?=?dialog;
    ????????display?
    =?Display.getCurrent();
    ????}

    ??? //因?yàn)檫@里需要在非UI線程中更新UI,所以要用display.syncExec()方法。
    ????public?void?loginCanceled()?{
    ????????display.syncExec(
    new?Runnable()?{
    ????????????
    public?void?run()?{
    ????????????????dialog.getStackLayout().topControl?
    =?dialog
    ????????????????????????.getLoginInfoComposite();
    ????????????????dialog.getStackLayoutComposite().layout();
    ????????????????dialog.animate();
    ????????????????dialog.getButtonBar().setVisible(
    true);
    ????????????}
    ????????});
    ????}

    ????
    public?void?loginComplete()?{
    ????????display.syncExec(
    new?Runnable()?{
    ????????????@SuppressWarnings(
    "deprecation")
    ????????????
    public?void?run()?{
    ??? ??? ??? ??? //我知道Thread.stop()方法已經(jīng)被廢棄,但是暫時(shí)沒想到什么方法來中止
    ??? ??? ??? ??? //就暫時(shí)這樣子用了,還請(qǐng)大家指教!
    ????????????????dialog.getAnimateThread().stop();
    ????????????????dialog.okPressed();
    ????????????}
    ????????});
    ????}

    ????
    public?void?loginError(final?String?message)?{
    ????????display.syncExec(
    new?Runnable()?{
    ????????????
    public?void?run()?{
    ????????????????dialog.getErrorMessageLabel().setText(message);
    ????????????????dialog.getErrorMessageLabel().setImage(errorMessageImage);
    ????????????????dialog.getErrorMessageLabel().setBackground(
    ????????????????????????errorMessageBackground);
    ????????????????dialog.getStackLayout().topControl?
    =?dialog
    ????????????????????????.getLoginInfoComposite();
    ????????????????dialog.getStackLayoutComposite().layout();
    ????????????????dialog.animate();
    ????????????????dialog.getButtonBar().setVisible(
    true);
    ????????????}
    ????????});
    ????}

    ????
    public?void?loginStarted()?{
    ????????display.syncExec(
    new?Runnable()?{
    ????????????
    public?void?run()?{
    ????????????????dialog.getStackLayout().topControl?
    =?dialog
    ????????????????????????.getLoginAnimaComposite();
    ????????????????dialog.getStackLayoutComposite().layout();
    ????????????????dialog.animate();
    ????????????????dialog.getButtonBar().setVisible(
    false);
    ????????????}
    ????????});
    ????}

    posted @ 2006-09-25 19:02 小小涼粉 閱讀(2132) | 評(píng)論 (1)編輯 收藏

    主站蜘蛛池模板: 亚洲激情校园春色| 中文字幕无码成人免费视频| 亚洲AV无码资源在线观看| 亚洲日产2021三区在线| 亚洲国产另类久久久精品| 亚洲精品专区在线观看| 国产男女猛烈无遮挡免费视频网站 | 成人最新午夜免费视频| 91九色老熟女免费资源站| 久久免费公开视频| 免费看少妇高潮成人片| 久久国产精品免费一区二区三区| 色屁屁www影院免费观看视频| 亚洲avav天堂av在线网毛片| 中美日韩在线网免费毛片视频| 野花视频在线官网免费1| 成人无码视频97免费| 三年片免费观看大全国语| 久久午夜羞羞影院免费观看| 未满十八18禁止免费无码网站| 久久青草免费91线频观看不卡| 一区二区无码免费视频网站 | 免费播放春色aⅴ视频| va亚洲va日韩不卡在线观看| 免费h黄肉动漫在线观看| 日本亚洲视频在线| 最新亚洲春色Av无码专区| 欧美亚洲精品一区二区| 两个人看的www免费| 最近高清中文字幕免费| 国产精品69白浆在线观看免费| 亚洲国产精品狼友中文久久久| 成人午夜亚洲精品无码网站| 亚洲国产精品无码专区影院| 狠狠色香婷婷久久亚洲精品| 亚洲精品无码你懂的| 无码毛片一区二区三区视频免费播放| 久久一区二区三区免费| 青青久在线视频免费观看| 四虎影永久在线高清免费| 亚洲色大成网站WWW久久九九|