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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP