java 板


LINE

關鍵字有上色之 Blog 版: http://pt2club.blogspot.com/2011/09/gwt-image.html 備註:這篇是退伍後的復健治療... 所以... [遮臉] ======== GWT 當中的 Widget,大概只有 Button 的使用率大於 Image (這也難講,說不定有些人直接用 Image 作 button...... XD)。 所以來探究一下 source code 寫了啥東西。 要建立一個 Image,最直接了當的用法是給它 url: Image img = new Image("http://an.url/pic.jpg"); 這裡的 url 使用相對路徑亦可, 不過得注意是相對於載入這個 GWT module 的頁面就是了。 切到這個 Image(String) 這個 constructor, 會發現當中做了兩件事情: 將 state 設定為新產生的 UnclippedState 物件 設定 style name 為 "gwt-Image" 設定 style name 這檔子事情有點無關緊要,忽略不管。 至於 state 這個 field 是怎麼一回事? 這似乎得要回頭看開頭 JavaDoc 寫的: 「The image can be in 'unclipped' mode (the default) or 'clipped' mode.」 也就是說,Image 透過 state 來決定當下是哪一種使用方式, 這可以解釋為甚麼有另一個 Image(String, int, int, int, int) 的 constructor。 實際去看 Image 的 method 行為,getter、setter、onLoad() 等都是由 state 負責, 只有跟 event handler 有關的 method 是用 Widget.addHandler() 處理。 於是找到 Image 裡頭 State 這個 private 的 abstract class。 它只有兩個 method 不是 abstract 的: onLoad(Image) fireSyntheticLoadEvent(Image) 這兩個都跟 event 有關,在這篇文章當中先略過,以免枝節太多。 其餘的 abstract method 留給 ClippedState、UnclippedState 實做。 比對 ClippedState 與 UnclippedState 實做 method 的差異, 差別在於 ClippedState 多了 width、height、left、top 這幾個 field, UnclippedState 在取這些值時,是直接對 Image 所屬的 ImageElement 取值, 而 ClippedState 則直接回傳 field 的值。 另外,如果叫用到 ClippedState.setUrl() 會將 state 切換到 UnclippedState; 反之,如果叫用到 UnclippedState.setVisibleRect() 與 setUrlAndVisibleRect() 會將 state 切換到 ClippedState。 這到底在幹什麼? 回歸實際用途,ClippedState 的目的是只顯示圖片上的某個矩形區塊, 所以得加上長、寬、起始位置等資訊。 製造出這種效果的方法,則是靠 CSS 設定 span 的 background 來辦到。 怎麼知道的呢?答案在 constructor 當中的這行: image.replaceElement( impl.createStructure(url, left, top, width, height) ); 先用 ClippedImageImpl.createStructure() 製造出一個 Element 物件, 然後再把原本 Image 的 element 換成這個。 再仔細看一下 ClippedImageImpl 裡頭的寫法, 發現它直接用最硬幹的方式設定 element 的 HTML 與 style, 也難怪會抽出去自成一個 class。 這說明了為甚麼 JavaDoc 強調當 clipped 與 unclipped 互換時, 所有的 style 設定都會消失。 重新回到 Image,會發現這個 class 只是邏輯上的存在, 為了做到 clipped/unclipped 的效果,所以透過 State 來處理; 因為底層實做方式的不同,所以當物件的行為模式轉換時變更到對應的 state。 而真正對應 DOM,則是 ImageElement(unclipped mode)與 SpanElement(clipped mode)。 使用 Image 時哪會想到底下這麼多怪東西?好的 class 如當是也...... Image 最後還有一個 perfetch(String) 的功能,就留待下回分解了(?) -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.3.189







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP