﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font color="green"&gt;迭戈的博客&lt;/font&gt;-随笔分类-技术前沿</title><link>http://www.blogjava.net/aplomb/category/22647.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 20 Sep 2007 07:34:30 GMT</lastBuildDate><pubDate>Thu, 20 Sep 2007 07:34:30 GMT</pubDate><ttl>60</ttl><item><title>JavaFX 时钟</title><link>http://www.blogjava.net/aplomb/archive/2007/05/21/118989.html</link><dc:creator>快译站</dc:creator><author>快译站</author><pubDate>Mon, 21 May 2007 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/aplomb/archive/2007/05/21/118989.html</guid><description><![CDATA[<img src="http://sellmic.com/blog/wp-content/uploads/2007/05/javafx-clock.jpg">&nbsp;<br><br>今天看到这位博客的博主，把Chris Oliver 写的时钟改了一些代码，变成这个样子，呵呵，有兴趣的朋友可以参考下学习下面的源代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javafx.ui.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javafx.ui.canvas.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Date;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_90_282_Open_Image onclick="this.style.display='none'; Codehighlighter1_90_282_Open_Text.style.display='none'; Codehighlighter1_90_282_Closed_Image.style.display='inline'; Codehighlighter1_90_282_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_90_282_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_282_Closed_Text.style.display='none'; Codehighlighter1_90_282_Open_Image.style.display='inline'; Codehighlighter1_90_282_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Timer&nbsp;</span><span id=Codehighlighter1_90_282_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_90_282_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;elapsed:&nbsp;Number;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;minutes:&nbsp;Number;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;seconds:&nbsp;Number;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;hours:&nbsp;Number;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;running:&nbsp;Boolean;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>attribute&nbsp;Timer.elapsed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bind<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;running&nbsp;then<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">]&nbsp;dur&nbsp;</span><span style="COLOR: #000000">60000</span><span style="COLOR: #000000">&nbsp;linear<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;running<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_430_616_Open_Image onclick="this.style.display='none'; Codehighlighter1_430_616_Open_Text.style.display='none'; Codehighlighter1_430_616_Closed_Image.style.display='inline'; Codehighlighter1_430_616_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_430_616_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_430_616_Closed_Text.style.display='none'; Codehighlighter1_430_616_Open_Image.style.display='inline'; Codehighlighter1_430_616_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>trigger&nbsp;on&nbsp;Timer.elapsed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value&nbsp;</span><span id=Codehighlighter1_430_616_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_430_616_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;now&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;minutes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;now.getMinutes();<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;seconds&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;now.getSeconds()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;[.</span><span style="COLOR: #000000">35</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0.34</span><span style="COLOR: #000000">&nbsp;..&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">]&nbsp;dur&nbsp;</span><span style="COLOR: #000000">350</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;(now.getTime()&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;hours&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;now.getHours();<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_660_701_Open_Image onclick="this.style.display='none'; Codehighlighter1_660_701_Open_Text.style.display='none'; Codehighlighter1_660_701_Closed_Image.style.display='inline'; Codehighlighter1_660_701_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_660_701_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_660_701_Closed_Text.style.display='none'; Codehighlighter1_660_701_Open_Image.style.display='inline'; Codehighlighter1_660_701_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Clock&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;CompositeNode&nbsp;</span><span id=Codehighlighter1_660_701_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_660_701_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;attribute&nbsp;ticking:&nbsp;Boolean;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img id=Codehighlighter1_734_2150_Open_Image onclick="this.style.display='none'; Codehighlighter1_734_2150_Open_Text.style.display='none'; Codehighlighter1_734_2150_Closed_Image.style.display='inline'; Codehighlighter1_734_2150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_734_2150_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_734_2150_Closed_Text.style.display='none'; Codehighlighter1_734_2150_Open_Image.style.display='inline'; Codehighlighter1_734_2150_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>operation&nbsp;Clock.composeNode()&nbsp;</span><span id=Codehighlighter1_734_2150_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_734_2150_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_754_776_Open_Image onclick="this.style.display='none'; Codehighlighter1_754_776_Open_Text.style.display='none'; Codehighlighter1_754_776_Closed_Image.style.display='inline'; Codehighlighter1_754_776_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_754_776_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_754_776_Closed_Text.style.display='none'; Codehighlighter1_754_776_Open_Image.style.display='inline'; Codehighlighter1_754_776_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Timer&nbsp;</span><span id=Codehighlighter1_754_776_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_754_776_Open_Text><span style="COLOR: #000000">{running:&nbsp;bind&nbsp;ticking}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img id=Codehighlighter1_796_2147_Open_Image onclick="this.style.display='none'; Codehighlighter1_796_2147_Open_Text.style.display='none'; Codehighlighter1_796_2147_Closed_Image.style.display='inline'; Codehighlighter1_796_2147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_796_2147_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_796_2147_Closed_Text.style.display='none'; Codehighlighter1_796_2147_Open_Image.style.display='inline'; Codehighlighter1_796_2147_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;Group&nbsp;</span><span id=Codehighlighter1_796_2147_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_796_2147_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;[translate(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">),scale(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)]<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;secs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bind&nbsp;t.seconds<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mins&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bind&nbsp;t.minutes&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;secs</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;hrs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bind&nbsp;t.hours&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;mins</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id=Codehighlighter1_1004_1085_Open_Image onclick="this.style.display='none'; Codehighlighter1_1004_1085_Open_Text.style.display='none'; Codehighlighter1_1004_1085_Closed_Image.style.display='inline'; Codehighlighter1_1004_1085_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1004_1085_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1004_1085_Closed_Text.style.display='none'; Codehighlighter1_1004_1085_Open_Image.style.display='inline'; Codehighlighter1_1004_1085_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rect&nbsp;</span><span id=Codehighlighter1_1004_1085_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1004_1085_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill:&nbsp;white<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img id=Codehighlighter1_1106_1235_Open_Image onclick="this.style.display='none'; Codehighlighter1_1106_1235_Open_Text.style.display='none'; Codehighlighter1_1106_1235_Closed_Image.style.display='inline'; Codehighlighter1_1106_1235_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1106_1235_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1106_1235_Closed_Text.style.display='none'; Codehighlighter1_1106_1235_Open_Image.style.display='inline'; Codehighlighter1_1106_1235_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageView&nbsp;</span><span id=Codehighlighter1_1106_1235_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1106_1235_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;[]<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img id=Codehighlighter1_1159_1225_Open_Image onclick="this.style.display='none'; Codehighlighter1_1159_1225_Open_Text.style.display='none'; Codehighlighter1_1159_1225_Closed_Image.style.display='inline'; Codehighlighter1_1159_1225_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1159_1225_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1159_1225_Closed_Text.style.display='none'; Codehighlighter1_1159_1225_Open_Image.style.display='inline'; Codehighlighter1_1159_1225_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image:&nbsp;Image&nbsp;</span><span id=Codehighlighter1_1159_1225_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1159_1225_Open_Text><span style="COLOR: #000000">{url:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://sellmic.com/lab/dev/jfx/clock/images/clock_face.png</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img id=Codehighlighter1_1252_1997_Open_Image onclick="this.style.display='none'; Codehighlighter1_1252_1997_Open_Text.style.display='none'; Codehighlighter1_1252_1997_Closed_Image.style.display='inline'; Codehighlighter1_1252_1997_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1252_1997_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1252_1997_Closed_Text.style.display='none'; Codehighlighter1_1252_1997_Open_Image.style.display='inline'; Codehighlighter1_1252_1997_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group&nbsp;</span><span id=Codehighlighter1_1252_1997_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1252_1997_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;hourHand&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img id=Codehighlighter1_1303_1468_Open_Image onclick="this.style.display='none'; Codehighlighter1_1303_1468_Open_Text.style.display='none'; Codehighlighter1_1303_1468_Closed_Image.style.display='inline'; Codehighlighter1_1303_1468_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1303_1468_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1303_1468_Closed_Text.style.display='none'; Codehighlighter1_1303_1468_Open_Image.style.display='inline'; Codehighlighter1_1303_1468_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageView&nbsp;</span><span id=Codehighlighter1_1303_1468_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1303_1468_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;bind&nbsp;rotate(hrs</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">245</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img id=Codehighlighter1_1389_1454_Open_Image onclick="this.style.display='none'; Codehighlighter1_1389_1454_Open_Text.style.display='none'; Codehighlighter1_1389_1454_Closed_Image.style.display='inline'; Codehighlighter1_1389_1454_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1389_1454_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1389_1454_Closed_Text.style.display='none'; Codehighlighter1_1389_1454_Open_Image.style.display='inline'; Codehighlighter1_1389_1454_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image:&nbsp;Image&nbsp;</span><span id=Codehighlighter1_1389_1454_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1389_1454_Open_Text><span style="COLOR: #000000">{url:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://sellmic.com/lab/dev/jfx/clock/images/hour_hand.png</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;minuteHand&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img id=Codehighlighter1_1522_1690_Open_Image onclick="this.style.display='none'; Codehighlighter1_1522_1690_Open_Text.style.display='none'; Codehighlighter1_1522_1690_Closed_Image.style.display='inline'; Codehighlighter1_1522_1690_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1522_1690_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1522_1690_Closed_Text.style.display='none'; Codehighlighter1_1522_1690_Open_Image.style.display='inline'; Codehighlighter1_1522_1690_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageView&nbsp;</span><span id=Codehighlighter1_1522_1690_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1522_1690_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;bind&nbsp;rotate(mins&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">245</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img id=Codehighlighter1_1609_1676_Open_Image onclick="this.style.display='none'; Codehighlighter1_1609_1676_Open_Text.style.display='none'; Codehighlighter1_1609_1676_Closed_Image.style.display='inline'; Codehighlighter1_1609_1676_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1609_1676_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1609_1676_Closed_Text.style.display='none'; Codehighlighter1_1609_1676_Open_Image.style.display='inline'; Codehighlighter1_1609_1676_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image:&nbsp;Image&nbsp;</span><span id=Codehighlighter1_1609_1676_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1609_1676_Open_Text><span style="COLOR: #000000">{url:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://sellmic.com/lab/dev/jfx/clock/images/minute_hand.png</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;secondHand&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img id=Codehighlighter1_1756_1930_Open_Image onclick="this.style.display='none'; Codehighlighter1_1756_1930_Open_Text.style.display='none'; Codehighlighter1_1756_1930_Closed_Image.style.display='inline'; Codehighlighter1_1756_1930_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1756_1930_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1756_1930_Closed_Text.style.display='none'; Codehighlighter1_1756_1930_Open_Image.style.display='inline'; Codehighlighter1_1756_1930_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageView&nbsp;</span><span id=Codehighlighter1_1756_1930_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1756_1930_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;bind&nbsp;rotate(t.seconds&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">245</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img id=Codehighlighter1_1849_1916_Open_Image onclick="this.style.display='none'; Codehighlighter1_1849_1916_Open_Text.style.display='none'; Codehighlighter1_1849_1916_Closed_Image.style.display='inline'; Codehighlighter1_1849_1916_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1849_1916_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1849_1916_Closed_Text.style.display='none'; Codehighlighter1_1849_1916_Open_Image.style.display='inline'; Codehighlighter1_1849_1916_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image:&nbsp;Image&nbsp;</span><span id=Codehighlighter1_1849_1916_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1849_1916_Open_Text><span style="COLOR: #000000">{url:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://sellmic.com/lab/dev/jfx/clock/images/second_hand.png</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;[hourHand,&nbsp;minuteHand,&nbsp;secondHand]<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img id=Codehighlighter1_2018_2140_Open_Image onclick="this.style.display='none'; Codehighlighter1_2018_2140_Open_Text.style.display='none'; Codehighlighter1_2018_2140_Closed_Image.style.display='inline'; Codehighlighter1_2018_2140_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2018_2140_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2018_2140_Closed_Text.style.display='none'; Codehighlighter1_2018_2140_Open_Image.style.display='inline'; Codehighlighter1_2018_2140_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageView&nbsp;</span><span id=Codehighlighter1_2018_2140_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2018_2140_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;[]<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img id=Codehighlighter1_2071_2130_Open_Image onclick="this.style.display='none'; Codehighlighter1_2071_2130_Open_Text.style.display='none'; Codehighlighter1_2071_2130_Closed_Image.style.display='inline'; Codehighlighter1_2071_2130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2071_2130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2071_2130_Closed_Text.style.display='none'; Codehighlighter1_2071_2130_Open_Image.style.display='inline'; Codehighlighter1_2071_2130_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image:&nbsp;Image&nbsp;</span><span id=Codehighlighter1_2071_2130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2071_2130_Open_Text><span style="COLOR: #000000">{url:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://sellmic.com/lab/dev/jfx/clock/images/pin.png</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">]<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img id=Codehighlighter1_2159_2173_Open_Image onclick="this.style.display='none'; Codehighlighter1_2159_2173_Open_Text.style.display='none'; Codehighlighter1_2159_2173_Closed_Image.style.display='inline'; Codehighlighter1_2159_2173_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2159_2173_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2159_2173_Closed_Text.style.display='none'; Codehighlighter1_2159_2173_Open_Image.style.display='inline'; Codehighlighter1_2159_2173_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>Clock&nbsp;</span><span id=Codehighlighter1_2159_2173_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_2159_2173_Open_Text><span style="COLOR: #000000">{ticking:&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.blogjava.net/aplomb/aggbug/118989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aplomb/" target="_blank">快译站</a> 2007-05-21 21:39 <a href="http://www.blogjava.net/aplomb/archive/2007/05/21/118989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用jxpath 进行java对象查询</title><link>http://www.blogjava.net/aplomb/archive/2007/05/15/117544.html</link><dc:creator>快译站</dc:creator><author>快译站</author><pubDate>Tue, 15 May 2007 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/aplomb/archive/2007/05/15/117544.html</guid><description><![CDATA[作者：Bart van Riel <br>原文出处：<a href="http://www.javaworld.com/javaworld/jw-03-2007/jw-03-jxpath.html?page=1">http://www.javaworld.com/javaworld/jw-03-2007/jw-03-jxpath.html?page=1</a><br><br><strong>摘要</strong>：在最近的一个项目里，我需要遍历一个java对象树并从对象中获取值，为了避免使用重复的if else 语句，我需要一个工具使得我的工作可以更轻松，&#8220;我需要一个id为X的对象，并且要获取这个对象的A属性&#8221;，实际上，我需要一个对象查询工具！<br><br>JXPath 就是这样一个对象查询工具，它是一个apache common 组件，利用它，你可以使用著名的<a href="http://www.javaworld.com/javaworld/jw-03-2007/jw-03-jxpath.html?page=1#resources" target=_blank>xpath </a>规则语言来查询复杂的java 对象树。<br>我在我的项目中大量使用了JXPath，它对于开发速度的提升是相当可观的，同时也使得值抽取算法相当的轻快。<br><br>尽管如此，关于JXPath 的文档并不多。由于我正在进行深度开发这个组件，所以我决定在我的一个JXPath 全面指南里写下我的研究成果，你可以在我的<a href="http://www.javaworld.com/javaworld/jw-03-2007/jw-03-jxpath.html?page=1#resources" target=_blank>网站</a>上找到它，这篇文章是那篇指南的缩写版，能够使得你迅速开始JXPath 之旅。<br><br><strong>示例模型</strong><br><br>为了演示的目的，我们采取了一个相对简单的模型：一个公司有多个部门，一个部门有多个员工，下面是模型图：<br><br><a href="http://www.javaworld.com/javaworld/jw-03-2007/images/jw-03-jxpath.gif" target=_blank alt=""><img height=60 alt="Class model" src="http://www.javaworld.com/javaworld/jw-03-2007/images/jw-03-jxpath-thumb.gif" width=350></a><br><br>很自然，我们需要一些模型数据：<br><br>公司：
<p>Acme Inc.<br></p>
<p>Sales 销售部：</p>
<p>Johnny, Sales rep, 45<br></p>
<p>Sarah, Sales rep, 33</p>
<p>Magda, Office assistant, 27</p>
<br>
<p>Accounting 会计部</p>
<p>Steve, Head controller, 51</p>
<p>Peter, Assistant controller, 31</p>
<p>Susan, Office assistant, 27<br></p>
<p><br><br><strong>执行简单的JXPath 查询<br></strong><br>最简单的查询就是从对象树中查找一个对象，例如，要查找公司，用下面的代码：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">JXPathContext&nbsp;context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;JXPathContext.newContext(company);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Company&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Company)context.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>第一行展示了context （上下文）的创建，也就是对象树中所有JXPath的xpath 规则的起始点（相当于XML文档的根节点元素）。<br>第二行执行了实际的查询，因为这里的上下文是以公司开始的，所以要获取公司对象，只需要使用当前元素选择器&#8220;.&#8221;。<br><br><strong>使用谓词和变量<br></strong><br>一个员工是部门的子对象，获取员工名为johnny 的代码如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Employee)context.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList/employees[name='Johnny']</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>这段代码可以这样理解：遍历所有的部门寻找姓名为johnny的员工<br><br>上面的代码段解释了如何使用谓词进行对象的搜索，使用谓词相当于SQL语句中的where字句，我们可以绑定多条谓词：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;(Employee)context.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList/employees[name='Susan'&nbsp;and&nbsp;age=27]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>如果你不是只进行一次查询的话，像上面这样的硬编码一般都不可取，更好的方法是定义一个可重用的查询，那么你就可以在多条语句中进行重用，为适应参数化的查询JXPath&nbsp;支持变量查询，代码如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;context.getVariables().declareVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Susan</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>context.getVariables().declareVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">age</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Integer(</span><span style="COLOR: #000000">27</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;(Employee)context.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList/employees[name=$name&nbsp;and&nbsp;age=$age]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br><strong>对于集合元素的迭代<br></strong><br><br>JXPath&nbsp;提供了一个迭代器，可以对查询的结果进行迭代，下面的代码：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_73_127_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_127_Open_Text.style.display='none'; Codehighlighter1_73_127_Closed_Image.style.display='inline'; Codehighlighter1_73_127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_73_127_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_127_Closed_Text.style.display='none'; Codehighlighter1_73_127_Open_Image.style.display='inline'; Codehighlighter1_73_127_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.iterate(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;iter.hasNext();)</span><span id=Codehighlighter1_73_127_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_73_127_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Department&nbsp;d&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Department)iter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>迭代所有员工的代码如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_83_135_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_135_Open_Text.style.display='none'; Codehighlighter1_83_135_Closed_Image.style.display='inline'; Codehighlighter1_83_135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_83_135_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_135_Closed_Text.style.display='none'; Codehighlighter1_83_135_Open_Image.style.display='inline'; Codehighlighter1_83_135_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.iterate(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList/employees</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;iter.hasNext();)</span><span id=Codehighlighter1_83_135_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_83_135_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Employee)iter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>下面是一个结合变量绑定和迭代的例子：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;context.getVariables().declareVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">deptName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sales</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>context.getVariables().declareVariable(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">minAge</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Integer(</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">));<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.iterate(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">$deptName]</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">employees[age</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">$minAge]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;iter.hasNext();){</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Employee)iter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br><strong>指针 Pointers</strong><br><br>指针是JXPath的一个工具类，用来代表对象树中的一个对象的引用，比如，一个指针可能代表了第二个部门的第一个员工，相比于直接从对象树中查找对象的对象，指针提供了一些额外的功能，比如在相关上下文下的相关查询，下面有具体的例子：<br><br><strong>使用指针<br></strong><br>使用指针指向一个对象和从对象树中获取一个对象是相等的：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;JXPathContext&nbsp;context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;JXPathContext.newContext(company);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>Pointer&nbsp;empPtr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.getPointer(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList[name='Sales']/employees[age&gt;40]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>System.out.println(empPtr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">output:&nbsp;/departmentList[1]/employees[1]</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>System.out.println(((Employee)empPtr.getValue()).getName());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">output:&nbsp;Johnny<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>可以看出，一个指针只是代表了一个对象的位置，而不是对象本身，同时也可以看出，可以通过指针的getValue方法获取指针代表的对象。<br><br>相关上下文下的相关查询<br>由于指针是代表对象的位置，所以可以被用来作为整个对象树来导航的一个引用，为了做到这点，我们可以把指针指向根对象（就好像上面例子中的公司对象），也就是所谓的相关上下文，在相关上下文，你可以通过相关查询进行整个对象树的查询，指针的这个高级使用提供了极大的弹性，下面我们例子说明：<br><br>开始，我们来创建一个相关上下文：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.iteratePointers(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/departmentList[name='Sales']</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">employees[age</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;iter.hasNext();){</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;Pointer&nbsp;empPtr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Pointer)iter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;JXPathContext&nbsp;relativeContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;context.getRelativeContext(empPtr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>&nbsp;使用相关上下文，XPath 查询能够在对象树的子节点，父节点，超父节点等进行执行，具体看下面的例子：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Current&nbsp;employee</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">Employee&nbsp;emp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Employee)relativeContext.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Employee&nbsp;name</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">String&nbsp;name&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)relativeContext.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">./name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Name&nbsp;of&nbsp;the&nbsp;Department&nbsp;this&nbsp;Employee&nbsp;belongs&nbsp;to&nbsp;(a&nbsp;parent&nbsp;object)</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">String&nbsp;deptName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)relativeContext.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">../name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Name&nbsp;of&nbsp;the&nbsp;Company&nbsp;this&nbsp;Employee&nbsp;belongs&nbsp;to&nbsp;(a&nbsp;'grandparent'&nbsp;object)</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">String&nbsp;compName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)relativeContext.getValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">../../name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">All&nbsp;coworkers&nbsp;of&nbsp;this&nbsp;Employee&nbsp;(sibling&nbsp;objects)</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_557_618_Open_Image onclick="this.style.display='none'; Codehighlighter1_557_618_Open_Text.style.display='none'; Codehighlighter1_557_618_Closed_Image.style.display='inline'; Codehighlighter1_557_618_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_557_618_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_557_618_Closed_Text.style.display='none'; Codehighlighter1_557_618_Open_Image.style.display='inline'; Codehighlighter1_557_618_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;empIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;relativeContext.iterate(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">../employees</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;empIter.hasNext();)</span><span id=Codehighlighter1_557_618_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_557_618_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Employee&nbsp;colleague&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Employee)empIter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/dot.gif"></span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><br><strong>总结</strong><br><br>JXPath 在遍历，导航，和查询复杂的对象树时是非常有用的工具，由于它使用 xpath 语言 进行查询，因此有大量的资料可以帮助构建高效的复杂对象树查询，指针和相关上下文的加入使得查询更加方便。<br><br><br><strong>相关资源</strong>：<br>1，下载本文的源代码 <a href="http://www.javaworld.com/javaworld/jw-03-2007/jxpath/jw-03-jxpath.zip">http://www.javaworld.com/javaworld/jw-03-2007/jxpath/jw-03-jxpath.zip</a><br>2，查看全面指南 <a href="http://www.tutorials.tfo-eservices.eu/">http://www.tutorials.tfo-eservices.eu/</a><br>3，XPATH 指南 <a href="http://www.w3schools.com/xpath">http://www.w3schools.com/xpath</a> <br><br><span style="FONT-SIZE: 18pt; COLOR: red">不要忘了，广告也精彩哦</span><br>
<hr>
<script type="text/javascript"><!--
google_ad_client = "pub-6282981512077428";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel = "";
//-->
</script><script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<img src ="http://www.blogjava.net/aplomb/aggbug/117544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aplomb/" target="_blank">快译站</a> 2007-05-15 11:13 <a href="http://www.blogjava.net/aplomb/archive/2007/05/15/117544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>