﻿<?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-Do you drink java?-随笔分类-JFC</title><link>http://www.blogjava.net/leon/category/2109.html</link><description>&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;像写情书一样coding</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:19:36 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:19:36 GMT</pubDate><ttl>60</ttl><item><title>[Swing]在 JFileChooser 中进行文件验证的小技巧</title><link>http://www.blogjava.net/leon/archive/2006/11/23/83023.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Thu, 23 Nov 2006 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/11/23/83023.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/83023.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/11/23/83023.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/83023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/83023.html</trackback:ping><description><![CDATA[
		<p>我们在做GUI编程的时候经常需要用到JFileChooser组件构造一个文件选取对话框来为用户提供打开文件、保存文件等操作。<br /><br />通常的做法是调用JFileChooser.showXXX()方法显示文件选取对话框并且选择一个文件后，点击<font face="Courier New"><font face="Times New Roman">Approve 按钮（默认情况下标有 "Open" 或 "Save"）</font>，</font>当对话框关闭后使用JFileChooser.getSelectedFile()方法得到选取的文件（或使用JFileChooser.getSelectedFiles()取得选取的文件数组），然后再对被选取的文件有效性进行验证（例如，文件的文件名是否合法、选取的路径下是否已有同名文件存在等等），如果验证不通过，需要再次打开文件选择对话框进行选取。<br /><br />显然，验证没有通过的情况下，文件选取对话框被反复的打开和关闭，影响用户体验。<br /><br />我现在介绍一个方法，在点击了文件选取对话框上的<font face="Courier New"><font face="Times New Roman">Approve 按钮</font>后，</font><font face="Times New Roman">文件选取对话框关闭前对选取的文件进行验证，如果验证没有通过，那么对话框不关闭，直接进行下一次选择。<br /><br />查看JFileChooser的API，可以发现这样一个方法 <u><font color="#000000"><strong>public void approveSelection()</strong></font></u> ，这个方法会在用户单击 Approve 按钮时由 UI 调用此方法。导致使用等于 <code>APPROVE_SELECTION</code> 的命令字符串激发一个操作事件。<br /><br />那么，我们现在可以选择继承JFileChooser再覆写这个方法，将对选中文件的有效性验证写入这个方法中，只有当验证通过时才调用超类的approveSelection() 完成文件选取，否则直接返回，继续选择新的文件。<br /><br />下面是我写的一个demo以供参考：<br /><br />import java.io.File;<br />import javax.swing.JOptionPane;</font></p>
		<p>
				<font face="Times New Roman">/**<br /> * 在 JFileChooser 中进行文件验证的小技巧<br /> * @author Chen Wei<br /> * @email <a href="mailto:chenwei.mobi@gmail.com">chenwei.mobi@gmail.com</a><br /> */<br />public class JFileChooserDemo extends javax.swing.JFileChooser{<br />    <br />    public void approveSelection(){<br />        File file = getSelectedFile();<br />        <br />        // 验证文件名是否合法<br />        if (!validateFileName(file.getName())) {<br />            JOptionPane.showMessageDialog(getParent(), "文件名不能包含下列任何字符之一：\n \\ / : * ? \" &lt; &gt; |");<br />            return;<br />        }else{<br />            super.approveSelection();<br />        }<br />    }<br />    <br />    /**<br />     * 验证输入字符串参数是否为有效文件名。<br />     * @param name 待验证的文件名字符串。<br />     * @return 通过验证，文件名无效返回 false，有效返回 true。<br />     */<br />    public static boolean validateFileName(String name) {<br />        if (name.indexOf('\\') != -1 || name.indexOf('/') != -1 ||<br />            name.indexOf(':') != -1 || name.indexOf('*') != -1 ||<br />            name.indexOf('?') != -1 || name.indexOf('"') != -1 ||<br />            name.indexOf('&lt;') != -1 || name.indexOf('&gt;') != -1 ||<br />            name.indexOf('|') != -1) {</font>
		</p>
		<p>
				<font face="Times New Roman">            return false;<br />        } else {<br />            return true;<br />        }<br />    }<br />    <br />    public static void main(String[] args){<br />        JFileChooserDemo chooser = new JFileChooserDemo();<br />        chooser.showOpenDialog(null);<br />    }<br />}</font>
				<br />
				<br />程序运行截图：<br /><img title="JFileChooserDemo.jpg" height="360" alt="JFileChooserDemo.jpg" src="http://www.blogjava.net/images/blogjava_net/leon/program/JFileChooserDemo.jpg" width="508" border="0" /></p>
<img src ="http://www.blogjava.net/leon/aggbug/83023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-11-23 14:15 <a href="http://www.blogjava.net/leon/archive/2006/11/23/83023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image]使用 Java 2D 对图像进行缩放</title><link>http://www.blogjava.net/leon/archive/2006/08/27/66017.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Sun, 27 Aug 2006 10:41:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/08/27/66017.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/66017.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/08/27/66017.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/66017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/66017.html</trackback:ping><description><![CDATA[
		<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_4_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_221_Open_Text.style.display='none'; Codehighlighter1_4_221_Closed_Image.style.display='inline'; Codehighlighter1_4_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_4_221_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_221_Closed_Text.style.display='none'; Codehighlighter1_4_221_Open_Image.style.display='inline'; Codehighlighter1_4_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000">    </span>
				<span id="Codehighlighter1_4_221_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">/** */</span>
				<span id="Codehighlighter1_4_221_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 缩放 - 参数指定目标图缩放比例。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> srcImage 源图像对象。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> xscale 图像 x 轴（宽度）上的的缩放比例。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> yscale 图像 y 轴（高度）上的的缩放比例。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> hints 重新绘图使用的 RenderingHints 对象。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@return</span>
						<span style="COLOR: #008000"> 缩放后的图像对象。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_340_1007_Open_Image" onclick="this.style.display='none'; Codehighlighter1_340_1007_Open_Text.style.display='none'; Codehighlighter1_340_1007_Closed_Image.style.display='inline'; Codehighlighter1_340_1007_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_340_1007_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_340_1007_Closed_Text.style.display='none'; Codehighlighter1_340_1007_Open_Image.style.display='inline'; Codehighlighter1_340_1007_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"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> BufferedImage scaleJ2D(BufferedImage srcImage, </span>
				<span style="COLOR: #0000ff">double</span>
				<span style="COLOR: #000000"> xscale, </span>
				<span style="COLOR: #0000ff">double</span>
				<span style="COLOR: #000000"> yscale, RenderingHints hints) </span>
				<span id="Codehighlighter1_340_1007_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_340_1007_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> width </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">) ((</span>
						<span style="COLOR: #0000ff">double</span>
						<span style="COLOR: #000000">) srcImage.getWidth() </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> xscale);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> height </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> (</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">) ((</span>
						<span style="COLOR: #0000ff">double</span>
						<span style="COLOR: #000000">) srcImage.getHeight() </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> yscale);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        AffineTransform affineTransform </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> AffineTransform();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        affineTransform.scale(xscale, yscale);<br /><img id="Codehighlighter1_624_741_Open_Image" onclick="this.style.display='none'; Codehighlighter1_624_741_Open_Text.style.display='none'; Codehighlighter1_624_741_Closed_Image.style.display='inline'; Codehighlighter1_624_741_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_624_741_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_624_741_Closed_Text.style.display='none'; Codehighlighter1_624_741_Open_Image.style.display='inline'; Codehighlighter1_624_741_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(hints </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">)</span>
						<span id="Codehighlighter1_624_741_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_624_741_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            hints </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_DEFAULT);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        AffineTransformOp affineTransformOp </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> AffineTransformOp( affineTransform, hints);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BufferedImage dstImage </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> BufferedImage(width, height, srcImage.getType());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> affineTransformOp.filter(srcImage, dstImage);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/leon/aggbug/66017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-08-27 18:41 <a href="http://www.blogjava.net/leon/archive/2006/08/27/66017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image]使用 Java 2D 将彩色图像转换成灰度图</title><link>http://www.blogjava.net/leon/archive/2006/08/27/65992.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Sun, 27 Aug 2006 06:33:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/08/27/65992.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/65992.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/08/27/65992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/65992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/65992.html</trackback:ping><description><![CDATA[
		<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_4_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_133_Open_Text.style.display='none'; Codehighlighter1_4_133_Closed_Image.style.display='inline'; Codehighlighter1_4_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_4_133_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_133_Closed_Text.style.display='none'; Codehighlighter1_4_133_Open_Image.style.display='inline'; Codehighlighter1_4_133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000">    </span>
				<span id="Codehighlighter1_4_133_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">/** */</span>
				<span id="Codehighlighter1_4_133_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 将彩色图像转换为灰度图。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> srcImage 源彩色图像。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> hints 重新绘图使用的 RenderingHints 对象。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@return</span>
						<span style="COLOR: #008000"> 目标灰度图。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_229_787_Open_Image" onclick="this.style.display='none'; Codehighlighter1_229_787_Open_Text.style.display='none'; Codehighlighter1_229_787_Closed_Image.style.display='inline'; Codehighlighter1_229_787_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_229_787_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_229_787_Closed_Text.style.display='none'; Codehighlighter1_229_787_Open_Image.style.display='inline'; Codehighlighter1_229_787_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"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> BufferedImage transformGrayJ2D(BufferedImage srcImage,RenderingHints hints) </span>
				<span id="Codehighlighter1_229_787_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_229_787_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BufferedImage dstImage </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> BufferedImage(srcImage.getWidth(), srcImage.getHeight(), srcImage.getType());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img id="Codehighlighter1_382_540_Open_Image" onclick="this.style.display='none'; Codehighlighter1_382_540_Open_Text.style.display='none'; Codehighlighter1_382_540_Closed_Image.style.display='inline'; Codehighlighter1_382_540_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_382_540_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_382_540_Closed_Text.style.display='none'; Codehighlighter1_382_540_Open_Image.style.display='inline'; Codehighlighter1_382_540_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000"> (hints </span>
						<span style="COLOR: #000000">==</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">) </span>
						<span id="Codehighlighter1_382_540_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_382_540_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Graphics2D g2 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> dstImage.createGraphics();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            hints </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> g2.getRenderingHints();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            g2.dispose();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            g2 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ColorSpace grayCS </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ColorSpace.getInstance(ColorSpace.CS_GRAY);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ColorConvertOp colorConvertOp </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> ColorConvertOp(grayCS, hints);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        colorConvertOp.filter(srcImage, dstImage);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> dstImage;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/leon/aggbug/65992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-08-27 14:33 <a href="http://www.blogjava.net/leon/archive/2006/08/27/65992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image]使用 Java 2D 取得图像上指定位置像素的 rgb 颜色分量</title><link>http://www.blogjava.net/leon/archive/2006/08/16/63838.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Wed, 16 Aug 2006 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/08/16/63838.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/63838.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/08/16/63838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/63838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/63838.html</trackback:ping><description><![CDATA[
		<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_4_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_190_Open_Text.style.display='none'; Codehighlighter1_4_190_Closed_Image.style.display='inline'; Codehighlighter1_4_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_4_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_190_Closed_Text.style.display='none'; Codehighlighter1_4_190_Open_Image.style.display='inline'; Codehighlighter1_4_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000">    </span>
				<span id="Codehighlighter1_4_190_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">/** */</span>
				<span id="Codehighlighter1_4_190_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 取得图像上指定位置像素的 rgb 颜色分量。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> image 源图像。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> x 图像上指定像素位置的 x 坐标。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@param</span>
						<span style="COLOR: #008000"> y 图像上指定像素位置的 y 坐标。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
						<span style="COLOR: #808080">@return</span>
						<span style="COLOR: #008000"> 返回包含 rgb 颜色分量值的数组。元素 index 由小到大分别对应 r，g，b。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />     </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_255_612_Open_Image" onclick="this.style.display='none'; Codehighlighter1_255_612_Open_Text.style.display='none'; Codehighlighter1_255_612_Closed_Image.style.display='inline'; Codehighlighter1_255_612_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_255_612_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_255_612_Closed_Text.style.display='none'; Codehighlighter1_255_612_Open_Image.style.display='inline'; Codehighlighter1_255_612_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"> </span>
				<span style="COLOR: #0000ff">static</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000">[] getRGB(BufferedImage image,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> x,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> y)</span>
				<span id="Codehighlighter1_255_612_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_255_612_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">[] rgb </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img id="Codehighlighter1_366_577_Open_Image" onclick="this.style.display='none'; Codehighlighter1_366_577_Open_Text.style.display='none'; Codehighlighter1_366_577_Closed_Image.style.display='inline'; Codehighlighter1_366_577_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_366_577_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_366_577_Closed_Text.style.display='none'; Codehighlighter1_366_577_Open_Image.style.display='inline'; Codehighlighter1_366_577_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(image </span>
						<span style="COLOR: #000000">!=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">null</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;&amp;</span>
						<span style="COLOR: #000000"> x </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> image.getWidth() </span>
						<span style="COLOR: #000000">&amp;&amp;</span>
						<span style="COLOR: #000000"> y </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> image.getHeight())</span>
						<span id="Codehighlighter1_366_577_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_366_577_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            rgb </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000">[</span>
								<span style="COLOR: #000000">3</span>
								<span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> pixel </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> image.getRGB(x,y);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            rgb[</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (pixel </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0xff0000</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">&gt;&gt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">16</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            rgb[</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (pixel </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0xff00</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #000000">&gt;&gt;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">8</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            rgb[</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (pixel </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0xff</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> rgb;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span>
				</span>
		</div>
		<p>
				<br />使用这个方法前需要先将图像文件从磁盘上读到一个 java.awt.image.BufferedImage 对象中，我们可以用 J2SE 包含的 ImageIO 库。</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_4_67_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4_67_Open_Text.style.display='none'; Codehighlighter1_4_67_Closed_Image.style.display='inline'; Codehighlighter1_4_67_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_4_67_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4_67_Closed_Text.style.display='none'; Codehighlighter1_4_67_Open_Image.style.display='inline'; Codehighlighter1_4_67_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">try</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_4_67_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_4_67_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    BufferedImage bi </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ImageIO.read(</span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> File(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> test.jpg </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">));<br /><img id="Codehighlighter1_92_120_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_120_Open_Text.style.display='none'; Codehighlighter1_92_120_Closed_Image.style.display='inline'; Codehighlighter1_92_120_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_92_120_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_120_Closed_Text.style.display='none'; Codehighlighter1_92_120_Open_Image.style.display='inline'; Codehighlighter1_92_120_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">catch</span>
				<span style="COLOR: #000000"> (IOException ex) </span>
				<span id="Codehighlighter1_92_120_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_92_120_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    ex.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />
<img src ="http://www.blogjava.net/leon/aggbug/63838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-08-16 10:55 <a href="http://www.blogjava.net/leon/archive/2006/08/16/63838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Download] Java 2 图形设计卷Ⅰ：AWT</title><link>http://www.blogjava.net/leon/archive/2006/06/21/54138.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Wed, 21 Jun 2006 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/06/21/54138.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/54138.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/06/21/54138.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/54138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/54138.html</trackback:ping><description><![CDATA[
		<img src="../../images/blogjava_net/leon/program/Java2AWT_s.jpg" alt="Java2AWT_s.jpg" border="0" height="142" width="100" />
		<br />Java 2 图形设计卷Ⅰ：AWT<br />Graphic Java 1.2 Mastering the JFC Volume Ⅰ:AWT<br />[美]David M.Geary 著 马欣民等译<br />机械工业出版社<br /><a href="/Files/leon/Java2%E5%9B%BE%E5%BD%A2%E8%AE%BE%E8%AE%A1%E5%8D%B71AWT.rar"><br />http://www.blogjava.net/Files/leon/Java2图形设计卷1AWT.rar</a><br /><img src ="http://www.blogjava.net/leon/aggbug/54138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-06-21 11:07 <a href="http://www.blogjava.net/leon/archive/2006/06/21/54138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zt] Swing是MVC设计的典范</title><link>http://www.blogjava.net/leon/archive/2006/06/13/52360.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 13 Jun 2006 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/06/13/52360.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/52360.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/06/13/52360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/52360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/52360.html</trackback:ping><description><![CDATA[不管你的项目是否用到了Swing技术，我都要说，Swing是一个设计优秀的Java包，它充满了大师的智慧。如果你学了Java却连一个Button还不会写，就象你学习Visual Basic却不会用Button，那可绝对是不能被原谅的。Swing技术的应用已经在国外大行其道，由于java的免费、易学以及大家对于java技术的充分信赖，好多公司早早的就把应用程序的一切，从后台服务到前台人机交互界面，统统移到了java开发上。Swing出现了快10年了，凭借其先进的设计思想，一直未曾落后于哪种语言的界面开发技术，使用和理解Swing的设计思想，对软件开发者大有裨益。 <br /><br />Swing的设计是MVC的典范。虽然MVC的概念有点泛滥，可是真正能够理解并熟练掌握、在设计和开发里面自然流露的并不多见。记得用VC＋＋开发程序时候，MFC向导也是生成Document和View两个类，当时一直奇怪为什么这么绕圈子。再看Swing的设计，则到处充满了MVC的痕迹。仔细研究Swing中事件监听、Model-View分离、Renderer/Editor机制、可插拔的LookAndFeel等机制，简直就是一门艺术，充满了美感。而如果你非常痛恨这些设计并觉得他们怪异，很可能你是刚从VB或者Delphi转过来，这些快速开发工具帮助了你也“害”了你。 <br /><br />Swing设计的不错，不过可能过度学术化的设计也使得Swing跑起来并不灵巧，学习难度也大。这客观上确实使得Swing一直没有被广泛使用，而且广受诟病。记得以前“Swing有什么成功的应用吗？”之类的帖子一直是热门话题。IBM等则趁机抓住小辫子弄了SWT吸引了不少人，使得Java GUI技术面临分裂的危险。 <br /><br />不过随着JAVA的不断升级和优化，Swing的速度一直在提高，美观性也在改善，基于Swing的成功应用也越来越多了。关于Swing是否消亡或被SWT代替或是否能作桌面应用的争论逐渐少了。不过喜欢并精通Swing技术的开发者，尤其在国内，依旧非常少。 <br /><br />好在情况在转好。Sun正意识到Eclipse和SWT所带来的威胁，下了大力气发展NetBeans，其最新版本对Swing GUI可视化设计的支持已经超过了所有对手，其Rich Client框架也走向成熟，这对Swing的发展和应用是一个很大的推动。随着WEB热潮的减退，人们又更多的开始理性的思考B/S和C/S架构的选择，某些领域Swing技术已经成为首选的解决方案。随着JGoodies、JIDE、TWaver等优秀Swing产品的不断涌现，Swing会以更快速度在桌面应用中普及。 <br /><img src="http://www.matrix.org.cn/resource/upload/article/2006_05_12_141218_sKDgLpeqNT.png" /><br /><img style="WIDTH: 700px; HEIGHT: 600px" height="600" src="http://www.matrix.org.cn/resource/upload/article/2006_05_12_141304_LLuClmqhGM.png" width="708" /><br /><br /><br />原文地址<a href="http://www.matrix.org.cn/resource/article/44/44417_Swing+MVC.html">http://www.matrix.org.cn/resource/article/44/44417_Swing+MVC.html</a><img src ="http://www.blogjava.net/leon/aggbug/52360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-06-13 10:28 <a href="http://www.blogjava.net/leon/archive/2006/06/13/52360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[tips] 获取当前系统的所有可用字体</title><link>http://www.blogjava.net/leon/archive/2006/06/03/50126.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Sat, 03 Jun 2006 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2006/06/03/50126.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/50126.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2006/06/03/50126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/50126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/50126.html</trackback:ping><description><![CDATA[
		<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: #008000">//</span><span style="COLOR: #008000"> 返回一个数组，它包含此 GraphicsEnvironment 中所有可用字体的像素级实例。</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000"><span style="COLOR: #000000">Font[] fonts </span></span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();<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"> 返回一个包含此 GraphicsEnvironment 中所有字体系列名称的数组，它针对默认语言环境进行了本地化，由 Locale.getDefault() 返回。</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #000000">String fontNames </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">  GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();</span></div>
<img src ="http://www.blogjava.net/leon/aggbug/50126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2006-06-03 14:51 <a href="http://www.blogjava.net/leon/archive/2006/06/03/50126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Swing] 布局管理器 - OverlayLayout </title><link>http://www.blogjava.net/leon/archive/2005/11/02/17885.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Wed, 02 Nov 2005 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/11/02/17885.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/17885.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/11/02/17885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/17885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/17885.html</trackback:ping><description><![CDATA[OverlayLayout是用于排列重叠组件的布局管理器。它的用途是以一些对齐的点为基准将一些组件层叠的放置在布局容器中。<BR><BR>组件的横轴和纵轴的对齐点介于0.0和1.0之间。横轴（X轴）上0.0代表组件的左侧面，1.0代表组件的右侧面；纵轴（Y轴）上0.0和1.0分别代表组件的顶部和底部。<BR><BR>构造函数<BR><EM><STRONG>public OverlayLayout(Container target)<BR></STRONG></EM><BR>因为构造函数不会为target对象安装结果布局管理器，所以我们还必须调用setLayout()来完成此功能。<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"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">JPanel&nbsp;p1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JPanel();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>OverlayLayout&nbsp;overlay&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;OverlayLayout(p1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>p1.setLayout(overlay);&nbsp;</SPAN></DIV><BR><STRONG><U>在OverlayLayout布局管理器中，每个组件都有一对横纵坐标值，每个组件的位置只和它本身的横纵坐标值有关，换句话说就是组件以他自己的位置作为基准，横轴上0.0和1.0分别代表组件的左侧面和右侧面；纵轴上0.0和1.0分别代表组件的顶部和底部，和容器位置无关。如果一个组件的alignmentX属性设置为0.5，原本左侧面的位置对应0.0，现在变成了0.5，那么，现在组件的位置就要向左移动width/2的距离，使左侧面的位置对应现在的0.0。纵轴亦是如此，明白了吗？</U></STRONG><BR><BR>为了容易理解，我们来看《Java Swing》中关于OverlayLayout的一段样例程序，它可以编译运行。如图，你可以在输入框中调节容器中3个按钮的X，Y轴的值来看他们在容器中的位置是怎样改变的，多试几次，你就可以完全理解OverlayLayout。<BR><BR><IMG height=301 alt=OverlayTest.jpg src="http://www.blogjava.net/images/blogjava_net/leon/program/OverlayTest.jpg" width=502 border=0><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"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;OverlayTest.java<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;A&nbsp;test&nbsp;of&nbsp;the&nbsp;OverlayLayout&nbsp;manager&nbsp;allowing&nbsp;experimentation.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></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><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.awt.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><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.awt.event.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.swing.</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 id=Codehighlighter1_196_4146_Open_Image onclick="this.style.display='none'; Codehighlighter1_196_4146_Open_Text.style.display='none'; Codehighlighter1_196_4146_Closed_Image.style.display='inline'; Codehighlighter1_196_4146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_196_4146_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_196_4146_Closed_Text.style.display='none'; Codehighlighter1_196_4146_Open_Image.style.display='inline'; Codehighlighter1_196_4146_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;OverlayTest&nbsp;</SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000">&nbsp;JFrame&nbsp;</SPAN><SPAN id=Codehighlighter1_196_4146_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_196_4146_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_224_3482_Open_Image onclick="this.style.display='none'; Codehighlighter1_224_3482_Open_Text.style.display='none'; Codehighlighter1_224_3482_Closed_Image.style.display='inline'; Codehighlighter1_224_3482_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_224_3482_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_224_3482_Closed_Text.style.display='none'; Codehighlighter1_224_3482_Open_Image.style.display='inline'; Codehighlighter1_224_3482_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">public</SPAN><SPAN style="COLOR: #000000">&nbsp;OverlayTest()&nbsp;</SPAN><SPAN id=Codehighlighter1_224_3482_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_224_3482_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">OverlayLayout&nbsp;Test</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setSize(</SPAN><SPAN style="COLOR: #000000">500</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">300</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setDefaultCloseOperation(EXIT_ON_CLOSE);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;Container&nbsp;c&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getContentPane();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setLayout(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;GridBagLayout());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JPanel&nbsp;p1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;GridPanel();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;OverlayLayout&nbsp;overlay&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;OverlayLayout(p1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.setLayout(overlay);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton&nbsp;jb1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton&nbsp;jb2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton&nbsp;jb3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;b1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Dimension(</SPAN><SPAN style="COLOR: #000000">60</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">50</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;b2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Dimension(</SPAN><SPAN style="COLOR: #000000">80</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">40</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;b3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Dimension(</SPAN><SPAN style="COLOR: #000000">100</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">60</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb1.setMinimumSize(b1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb1.setMaximumSize(b1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb1.setPreferredSize(b1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb2.setMinimumSize(b2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb2.setMaximumSize(b2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb2.setPreferredSize(b2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb3.setMinimumSize(b3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb3.setMaximumSize(b3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb3.setPreferredSize(b3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleReporter&nbsp;reporter&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;SimpleReporter();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb1.addActionListener(reporter);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb2.addActionListener(reporter);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jb3.addActionListener(reporter);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.add(jb1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.add(jb2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.add(jb3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPanel&nbsp;p2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JPanel();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.setLayout(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;GridLayout(</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">6</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B1&nbsp;X</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B1&nbsp;Y</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B2&nbsp;X</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B2&nbsp;Y</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B3&nbsp;X</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">B3&nbsp;Y</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;JLabel.CENTER));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JLabel(</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;x1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Button1&nbsp;x&nbsp;alignment</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;y1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Button1&nbsp;y&nbsp;alignment</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;x2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;y2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;x3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField&nbsp;y3&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JTextField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">0.0</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(x1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(y1);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(x2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(y2);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(x3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.add(y3);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridBagConstraints&nbsp;constraints&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;GridBagConstraints();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.add(p1,&nbsp;constraints);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraints.gridx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JButton&nbsp;updateButton&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;JButton(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Update</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_2556_3302_Open_Image onclick="this.style.display='none'; Codehighlighter1_2556_3302_Open_Text.style.display='none'; Codehighlighter1_2556_3302_Closed_Image.style.display='inline'; Codehighlighter1_2556_3302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2556_3302_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2556_3302_Closed_Text.style.display='none'; Codehighlighter1_2556_3302_Open_Image.style.display='inline'; Codehighlighter1_2556_3302_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateButton.addActionListener(</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ActionListener()&nbsp;</SPAN><SPAN id=Codehighlighter1_2556_3302_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_2556_3302_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_2614_3292_Open_Image onclick="this.style.display='none'; Codehighlighter1_2614_3292_Open_Text.style.display='none'; Codehighlighter1_2614_3292_Closed_Image.style.display='inline'; Codehighlighter1_2614_3292_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_2614_3292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2614_3292_Closed_Text.style.display='none'; Codehighlighter1_2614_3292_Open_Image.style.display='inline'; Codehighlighter1_2614_3292_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;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;actionPerformed(ActionEvent&nbsp;ae)&nbsp;</SPAN><SPAN id=Codehighlighter1_2614_3292_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_2614_3292_Open_Text><SPAN style="COLOR: #000000">{<BR><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;jb1.setAlignmentX(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(x1.getText().trim()).floatValue());<BR><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;jb1.setAlignmentY(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(y1.getText().trim()).floatValue());<BR><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;jb2.setAlignmentX(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(x2.getText().trim()).floatValue());<BR><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;jb2.setAlignmentY(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(y2.getText().trim()).floatValue());<BR><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;jb3.setAlignmentX(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(x3.getText().trim()).floatValue());<BR><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;jb3.setAlignmentY(<BR><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;&nbsp;&nbsp;&nbsp;&nbsp;Float.valueOf(y3.getText().trim()).floatValue());<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><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;p1.revalidate();<BR><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><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><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.add(updateButton,&nbsp;constraints);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraints.gridx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraints.gridy&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constraints.gridwidth&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.add(p2,&nbsp;constraints);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_3528_3607_Open_Image onclick="this.style.display='none'; Codehighlighter1_3528_3607_Open_Text.style.display='none'; Codehighlighter1_3528_3607_Closed_Image.style.display='inline'; Codehighlighter1_3528_3607_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_3528_3607_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3528_3607_Closed_Text.style.display='none'; Codehighlighter1_3528_3607_Open_Image.style.display='inline'; Codehighlighter1_3528_3607_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">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String&nbsp;args[])&nbsp;</SPAN><SPAN id=Codehighlighter1_3528_3607_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_3528_3607_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OverlayTest&nbsp;ot&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;OverlayTest();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ot.setVisible(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_3668_3793_Open_Image onclick="this.style.display='none'; Codehighlighter1_3668_3793_Open_Text.style.display='none'; Codehighlighter1_3668_3793_Closed_Image.style.display='inline'; Codehighlighter1_3668_3793_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_3668_3793_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3668_3793_Closed_Text.style.display='none'; Codehighlighter1_3668_3793_Open_Image.style.display='inline'; Codehighlighter1_3668_3793_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">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;SimpleReporter&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;ActionListener&nbsp;</SPAN><SPAN id=Codehighlighter1_3668_3793_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_3668_3793_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_3722_3787_Open_Image onclick="this.style.display='none'; Codehighlighter1_3722_3787_Open_Text.style.display='none'; Codehighlighter1_3722_3787_Closed_Image.style.display='inline'; Codehighlighter1_3722_3787_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_3722_3787_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3722_3787_Closed_Text.style.display='none'; Codehighlighter1_3722_3787_Open_Image.style.display='inline'; Codehighlighter1_3722_3787_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;actionPerformed(ActionEvent&nbsp;ae)&nbsp;</SPAN><SPAN id=Codehighlighter1_3722_3787_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_3722_3787_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ae.getActionCommand());<BR><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><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_3838_4144_Open_Image onclick="this.style.display='none'; Codehighlighter1_3838_4144_Open_Text.style.display='none'; Codehighlighter1_3838_4144_Closed_Image.style.display='inline'; Codehighlighter1_3838_4144_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_3838_4144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3838_4144_Closed_Text.style.display='none'; Codehighlighter1_3838_4144_Open_Image.style.display='inline'; Codehighlighter1_3838_4144_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">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;GridPanel&nbsp;</SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000">&nbsp;JPanel&nbsp;</SPAN><SPAN id=Codehighlighter1_3838_4144_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_3838_4144_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_3878_4138_Open_Image onclick="this.style.display='none'; Codehighlighter1_3878_4138_Open_Text.style.display='none'; Codehighlighter1_3878_4138_Closed_Image.style.display='inline'; Codehighlighter1_3878_4138_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_3878_4138_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3878_4138_Closed_Text.style.display='none'; Codehighlighter1_3878_4138_Open_Image.style.display='inline'; Codehighlighter1_3878_4138_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;paint(Graphics&nbsp;g)&nbsp;</SPAN><SPAN id=Codehighlighter1_3878_4138_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_3878_4138_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">super</SPAN><SPAN style="COLOR: #000000">.paint(g);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;w&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getSize().width;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;h&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getSize().height;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(Color.red);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawRect(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,w</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">,h</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawLine(w</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,w</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,h);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawLine(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,h</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">,w,h</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">);<BR><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><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR><BR>最后提醒，使用OverlayLayout布局管理器关键要记住X，Y轴对应组件位置，和容器没有关系。只要明白这一点，使用还是很简单方便的，我用OverlayLayout布局管理器clone了一个PhotoShop的工具面板。<IMG height=19 src="http://www.blogjava.net/Emoticons/red_smile.gif" width=19 border=0><BR><IMG height=264 alt=ToolWidget.jpg src="http://www.blogjava.net/images/blogjava_net/leon/program/ToolWidget.jpg" width=60 border=0><img src ="http://www.blogjava.net/leon/aggbug/17885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-11-02 23:08 <a href="http://www.blogjava.net/leon/archive/2005/11/02/17885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image] 将屏幕截图保存成图像文件</title><link>http://www.blogjava.net/leon/archive/2005/10/26/16852.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Wed, 26 Oct 2005 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/10/26/16852.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/16852.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/10/26/16852.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/16852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/16852.html</trackback:ping><description><![CDATA[
		<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: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.awt.</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.awt.image.</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.imageio.</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 id="Codehighlighter1_111_560_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_560_Open_Text.style.display='none'; Codehighlighter1_111_560_Closed_Image.style.display='inline'; Codehighlighter1_111_560_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_111_560_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_560_Closed_Text.style.display='none'; Codehighlighter1_111_560_Open_Image.style.display='inline'; Codehighlighter1_111_560_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"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> CropScreen </span>
				<span id="Codehighlighter1_111_560_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_111_560_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_154_558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_558_Open_Text.style.display='none'; Codehighlighter1_154_558_Closed_Image.style.display='inline'; Codehighlighter1_154_558_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_558_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_558_Closed_Text.style.display='none'; Codehighlighter1_154_558_Open_Image.style.display='inline'; Codehighlighter1_154_558_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_154_558_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_154_558_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_164_493_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_493_Open_Text.style.display='none'; Codehighlighter1_164_493_Closed_Image.style.display='inline'; Codehighlighter1_164_493_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_493_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_493_Closed_Text.style.display='none'; Codehighlighter1_164_493_Open_Image.style.display='inline'; Codehighlighter1_164_493_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_164_493_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_164_493_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      Toolkit toolkit </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> Toolkit.getDefaultToolkit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      Dimension screenSize </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> toolkit.getScreenSize();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      Rectangle screenRect </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> Rectangle(screenSize);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      Robot robot </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> Robot();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      BufferedImage image </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> robot.createScreenCapture(screenRect);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      ImageIO.write(image, </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> File(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">screen.jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_520_554_Open_Image" onclick="this.style.display='none'; Codehighlighter1_520_554_Open_Text.style.display='none'; Codehighlighter1_520_554_Closed_Image.style.display='inline'; Codehighlighter1_520_554_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_520_554_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_520_554_Closed_Text.style.display='none'; Codehighlighter1_520_554_Open_Image.style.display='inline'; Codehighlighter1_520_554_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (Exception ex) </span>
								<span id="Codehighlighter1_520_554_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_520_554_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      ex.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/leon/aggbug/16852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-10-26 11:39 <a href="http://www.blogjava.net/leon/archive/2005/10/26/16852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Image] AWT使用ImageProducer/ImagConsumer模式加载和显示图像的原理</title><link>http://www.blogjava.net/leon/archive/2005/10/11/15217.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 11 Oct 2005 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/10/11/15217.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/15217.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/10/11/15217.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/15217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/15217.html</trackback:ping><description><![CDATA[<EM>以前写过2篇关于AWT中图像加载显示方法的文章，最近又多了一些对于 ImageProducer / ImagConsumer 模式的一些理解，尝试着用文字总结了一下，接着还想再写一篇介绍 AWT 中图像过滤的原理和方法。你可能认为现在学习 AWT 中的成像方法对于开发中已经没有太大的意义，因为已经有了 Java 2D 和 JAI ，但是我在实际工作中感到还是无法完全离开 AWT，特别是在一些基本的应用上。而且我觉得理解 AWT 的 Producer / Consumer (push) model 对于理解 Java 2D 的 Immediate mode model 和 JAI 的 Pipeline (pull) model 的都是有好处的。<BR><BR>因为水平有限，这方面学习资料相对也不丰富，我也不知道我的理解或想法是否完全正确或者表述清楚，感兴趣的朋友可以当作学习参考，希望能够和我联系进行进一步的讨论。</EM><BR><BR><BR>
<P>AWT 使用 ImageProducer / ImagConsumer 模式，支持加载和显示 GIF 图像文件格式和 JPEG 图像文件格式。因为图像的加载和显示是异步方式进行的，所以有大量加载和显示的技术。<BR><BR>在 AWT 中，提供了一个 java.awt.Image 类。java.awt.Image 类代表一个图像对象被作为参数传递给其他用来显示和处理图像的其他 AWT 对象使用。例如，通过调用 Graphics.drawImage(java.awt.Image, int, int, ImageObserver) 方法，可以在组件中画出图像。<BR><BR>java.awt.Image 是一个定义方法的抽象类，它定义的方法提供的对图像信息的访问。而创建和处理图像的基本结构则在 java.awt.image 包中。注意，这里不要和 java.awt.Image 发生混淆。<BR><BR>AWT  加载和显示图像使用的是 ImageProducer / ImagConsumer 模式，我们必须了解3个术语，ImageProducer（图像生产者），ImageConsumer（图像消费者）和ImageObserver（图像观察者）。<BR><BR>ImageProducer 负责生产图像的位，ImagConsumer 接受图像的位，ImageObserver 监视 ImageProducer 的图像生产过程。ImageProducer 生产传递给 ImagConsumer 与图像相关的位。因为图像生产过程是异步进行的，并不是一次性生产所有图像位，所以当 ImageProducer 加载图像时，ImageObserver 用来监视它的进展情况。因为 java.awt.Component 实现了 ImageObserver 接口，所以 AWT 中的每个组件都可以是ImageObserver，当一个给定的 ImageProducer 进行异步操作时，这个 ImageObserver 可以选择是否被更新。java.awt.image 包为 ImageProducer，ImagConsumer 和 ImageObserver 都定义了接口。<BR><BR><STRONG>ImageProducer</STRONG> <BR>和图像相关的位并不存储在 java.awt.Image 中，每个图像都维护一个和一个 ImageProducer 的关联。这个 ImageProducer 的责任是生产图像的位并将它们传送给 ImagConsumer，用于过滤该图像。<BR><BR>java.awt.image软件包中，FilteredImageSource（被过滤的图像源）和 MemoryImageSource（内存的图像源）实现了 ImageProducer  接口，是 ImageProducer 。<BR><BR><BR><STRONG>ImagConsumer</STRONG><BR>java.awt.image软件包中，ImageFilter（图像过滤器）和 PixelGrabber（像素抓取器）实现了 ImagConsumer 接口，是 ImagConsumer。<BR><BR><BR>ImageProducer 和 ImagConsumer 的详细介绍请阅读 <U><FONT color=#0000ff>使用 ImageProducer  / ImagConsumer 进行图像过滤</FONT></U><BR><BR><BR><STRONG>ImageObserver</STRONG><BR>ImageObserver接口中，定义了一个常数集合和一个方法：<BR><BR><EM>public boolean imageUpdate(image img, int flags, int x, int y, int width, int height);</EM><BR><BR>
<TABLE id=table1 width="60%" border=1>
<TBODY>
<TR>
<TD align=middle colSpan=2><SPAN lang=en-us>ImageObserver</SPAN>的常数</TD></TR>
<TR>
<TD align=middle>标志</TD>
<TD align=middle>含义</TD></TR>
<TR>
<TD><SPAN lang=en-us>ABORT</SPAN></TD>
<TD>图像加载被中断</TD></TR>
<TR>
<TD><SPAN lang=en-us>ALLBITS</SPAN></TD>
<TD>所有的位都已加载给图像</TD></TR>
<TR>
<TD><SPAN lang=en-us>ERROR</SPAN></TD>
<TD>在加载过程中发生错误</TD></TR>
<TR>
<TD><SPAN lang=en-us>FRAMEBITS</SPAN></TD>
<TD>多帧图像的一个帧被传送，一般用于<SPAN lang=en-us>GIF</SPAN></TD></TR>
<TR>
<TD><SPAN lang=en-us>HEIGHT</SPAN></TD>
<TD>图像的高度已经可用</TD></TR>
<TR>
<TD><SPAN lang=en-us>PROPERTIES</SPAN></TD>
<TD>图像的属性已经可用</TD></TR>
<TR>
<TD><SPAN lang=en-us>SOMEBITS</SPAN></TD>
<TD>图像的缩放变体的多个位已经可用</TD></TR>
<TR>
<TD><SPAN lang=en-us>WIDTH</SPAN></TD>
<TD>图像的宽度已经可用</TD></TR></TBODY></TABLE><BR>参数 flags 的作用是通知图像观察者图像生产的进展情况。这些常数代表传递给 ImageObserver.imageUpdate() 的 flags 参数中的位。<BR><BR>当 Component 作为 ImageObserver 时，一旦图像有新的部分被加载，就会调用 Component.imageUpdate() 方法，imageUpdate() 再调用 repaint() 重新绘制图像。repaint() 将先调用 update() 方法清除组件背景，再由 update() 方法调用 paint() 方法绘制图像。我们可以通过重载 imageUpdate() 方法控制组件何时被更新，重载 update() 方法控制是否每次重绘都要清除背景图像（每次重绘都清除背景图像会造成画面闪烁）。<BR><BR><BR>为了更好的理解，下面我们来看几个样例程序：<BR><BR><FONT color=#000000>例1，图像位在需要之前不被生产</FONT></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: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.net.URL;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.applet.Applet;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Graphics;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Image;</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 id=Codehighlighter1_221_556_Open_Image onclick="this.style.display='none'; Codehighlighter1_221_556_Open_Text.style.display='none'; Codehighlighter1_221_556_Closed_Image.style.display='inline'; Codehighlighter1_221_556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_221_556_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_221_556_Closed_Text.style.display='none'; Codehighlighter1_221_556_Open_Image.style.display='inline'; Codehighlighter1_221_556_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"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> ImageTestAppletSimple </SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> Applet</SPAN><SPAN id=Codehighlighter1_221_556_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_221_556_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> Image im;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_263_489_Open_Image onclick="this.style.display='none'; Codehighlighter1_263_489_Open_Text.style.display='none'; Codehighlighter1_263_489_Closed_Image.style.display='inline'; Codehighlighter1_263_489_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_263_489_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_263_489_Closed_Text.style.display='none'; Codehighlighter1_263_489_Open_Image.style.display='inline'; Codehighlighter1_263_489_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> init()</SPAN><SPAN id=Codehighlighter1_263_489_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_263_489_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        URL codebase </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> getCodeBase();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(codebase);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        im </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> getImage(codebase,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">flower.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.print(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Image width = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getWidth(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">" </SPAN><SPAN style="COLOR: #000000">hight = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getHeight(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_523_554_Open_Image onclick="this.style.display='none'; Codehighlighter1_523_554_Open_Text.style.display='none'; Codehighlighter1_523_554_Closed_Image.style.display='inline'; Codehighlighter1_523_554_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_523_554_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_523_554_Closed_Text.style.display='none'; Codehighlighter1_523_554_Open_Image.style.display='inline'; Codehighlighter1_523_554_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> paint(Graphics g)</SPAN><SPAN id=Codehighlighter1_523_554_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_523_554_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        g.drawImage(im,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P>输出结果：<BR>image width = -1 height = -1<BR><BR>图像的高度和宽度只有在图像被完全加载后才是有效的，输出结果说明 java.awt.image 相关的图像位在需要之前不被生产。<BR><BR><BR>例2，图像异步生产</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: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.net.URL;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.applet.Applet;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Graphics;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_148_480_Open_Image onclick="this.style.display='none'; Codehighlighter1_148_480_Open_Text.style.display='none'; Codehighlighter1_148_480_Closed_Image.style.display='inline'; Codehighlighter1_148_480_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_148_480_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_148_480_Closed_Text.style.display='none'; Codehighlighter1_148_480_Open_Image.style.display='inline'; Codehighlighter1_148_480_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"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> ImageTestAppletSimple2 </SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> Applet</SPAN><SPAN id=Codehighlighter1_148_480_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_148_480_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> Image im;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_190_238_Open_Image onclick="this.style.display='none'; Codehighlighter1_190_238_Open_Text.style.display='none'; Codehighlighter1_190_238_Closed_Image.style.display='inline'; Codehighlighter1_190_238_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_190_238_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_190_238_Closed_Text.style.display='none'; Codehighlighter1_190_238_Open_Image.style.display='inline'; Codehighlighter1_190_238_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> init()</SPAN><SPAN id=Codehighlighter1_190_238_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_190_238_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        im </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> getImage(getCodeBase(),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">flower.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_272_478_Open_Image onclick="this.style.display='none'; Codehighlighter1_272_478_Open_Text.style.display='none'; Codehighlighter1_272_478_Closed_Image.style.display='inline'; Codehighlighter1_272_478_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_272_478_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_478_Closed_Text.style.display='none'; Codehighlighter1_272_478_Open_Image.style.display='inline'; Codehighlighter1_272_478_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> paint(Graphics g)</SPAN><SPAN id=Codehighlighter1_272_478_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_272_478_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">drawing image...</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(g.drawImage(im,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P><SPAN style="COLOR: #000000">输出结果：<BR>drawing image...<BR></SPAN><SPAN style="COLOR: #000000">false<BR></SPAN><SPAN style="COLOR: #000000">drawing image...<BR></SPAN><SPAN style="COLOR: #000000">false<BR></SPAN><SPAN style="COLOR: #000000">drawing image...<BR></SPAN><SPAN style="COLOR: #000000">false<BR></SPAN><SPAN style="COLOR: #000000">drawing image...<BR></SPAN><SPAN style="COLOR: #000000">true</SPAN><BR><BR>输出结果说明组件作为 ImageObserver ，监视 ImageProducer 异步生产图像，一旦有新的图像位被生产时就重绘图像，图像完全加载后 drawImage() 方法返回 true。<BR><BR><BR>例3，重载 ImageObserver 的 imageUpdate() 方法，在图像完全加载前不调用 repaint()</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: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.applet.Applet;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Graphics;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_130_660_Open_Image onclick="this.style.display='none'; Codehighlighter1_130_660_Open_Text.style.display='none'; Codehighlighter1_130_660_Closed_Image.style.display='inline'; Codehighlighter1_130_660_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_130_660_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_130_660_Closed_Text.style.display='none'; Codehighlighter1_130_660_Open_Image.style.display='inline'; Codehighlighter1_130_660_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"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> ImageTestAppletWithUpdate </SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> Applet</SPAN><SPAN id=Codehighlighter1_130_660_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_130_660_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> Image im;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_172_336_Open_Image onclick="this.style.display='none'; Codehighlighter1_172_336_Open_Text.style.display='none'; Codehighlighter1_172_336_Closed_Image.style.display='inline'; Codehighlighter1_172_336_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_172_336_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_172_336_Closed_Text.style.display='none'; Codehighlighter1_172_336_Open_Image.style.display='inline'; Codehighlighter1_172_336_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> init()</SPAN><SPAN id=Codehighlighter1_172_336_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_172_336_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        im </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> getImage(getCodeBase(),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">flower.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.print(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Image width = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getWidth(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hight = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getHeight(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_370_401_Open_Image onclick="this.style.display='none'; Codehighlighter1_370_401_Open_Text.style.display='none'; Codehighlighter1_370_401_Closed_Image.style.display='inline'; Codehighlighter1_370_401_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_370_401_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_370_401_Closed_Text.style.display='none'; Codehighlighter1_370_401_Open_Image.style.display='inline'; Codehighlighter1_370_401_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> paint(Graphics g)</SPAN><SPAN id=Codehighlighter1_370_401_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_370_401_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        g.drawImage(im,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_479_658_Open_Image onclick="this.style.display='none'; Codehighlighter1_479_658_Open_Text.style.display='none'; Codehighlighter1_479_658_Closed_Image.style.display='inline'; Codehighlighter1_479_658_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_479_658_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_479_658_Closed_Text.style.display='none'; Codehighlighter1_479_658_Open_Image.style.display='inline'; Codehighlighter1_479_658_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">boolean</SPAN><SPAN style="COLOR: #000000"> imageUpdate(Image image,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> flags,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> x,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> y,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> w,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> h)</SPAN><SPAN id=Codehighlighter1_479_658_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_479_658_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">imageUpdate():x=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> x </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,y=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> y </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,w=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> w </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,h=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> h);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">((flags </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000"> ALLBITS) </SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>            </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_620_655_Open_Image onclick="this.style.display='none'; Codehighlighter1_620_655_Open_Text.style.display='none'; Codehighlighter1_620_655_Closed_Image.style.display='inline'; Codehighlighter1_620_655_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_620_655_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_620_655_Closed_Text.style.display='none'; Codehighlighter1_620_655_Open_Image.style.display='inline'; Codehighlighter1_620_655_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>        </SPAN><SPAN id=Codehighlighter1_620_655_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_620_655_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>            repaint();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>            </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>        }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P><BR><BR>例4，重载  Component.update() 方法，被调用时不清除背景图像，直接调用 paint() 方法绘制图像，消除闪烁</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: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.applet.Applet;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Graphics;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000"> java.awt.Image;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_143_713_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_713_Open_Text.style.display='none'; Codehighlighter1_143_713_Closed_Image.style.display='inline'; Codehighlighter1_143_713_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_143_713_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_713_Closed_Text.style.display='none'; Codehighlighter1_143_713_Open_Image.style.display='inline'; Codehighlighter1_143_713_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"> </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> ImageTestAppletWithSmoothDynamicUpdate </SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> Applet</SPAN><SPAN id=Codehighlighter1_143_713_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_143_713_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000"> Image im;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_185_345_Open_Image onclick="this.style.display='none'; Codehighlighter1_185_345_Open_Text.style.display='none'; Codehighlighter1_185_345_Closed_Image.style.display='inline'; Codehighlighter1_185_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_185_345_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_185_345_Closed_Text.style.display='none'; Codehighlighter1_185_345_Open_Image.style.display='inline'; Codehighlighter1_185_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> init()</SPAN><SPAN id=Codehighlighter1_185_345_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_185_345_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        im </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> getImage(getCodeBase(),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hl.jpg</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.print(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Image width = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getWidth(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hight = </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> im.getHeight(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">));<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_379_410_Open_Image onclick="this.style.display='none'; Codehighlighter1_379_410_Open_Text.style.display='none'; Codehighlighter1_379_410_Closed_Image.style.display='inline'; Codehighlighter1_379_410_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_379_410_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_379_410_Closed_Text.style.display='none'; Codehighlighter1_379_410_Open_Image.style.display='inline'; Codehighlighter1_379_410_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> paint(Graphics g)</SPAN><SPAN id=Codehighlighter1_379_410_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_379_410_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        g.drawImage(im,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_488_661_Open_Image onclick="this.style.display='none'; Codehighlighter1_488_661_Open_Text.style.display='none'; Codehighlighter1_488_661_Closed_Image.style.display='inline'; Codehighlighter1_488_661_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_488_661_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_488_661_Closed_Text.style.display='none'; Codehighlighter1_488_661_Open_Image.style.display='inline'; Codehighlighter1_488_661_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">boolean</SPAN><SPAN style="COLOR: #000000"> imageUpdate(Image image,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> flags,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> x,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> y,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> w,</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> h)</SPAN><SPAN id=Codehighlighter1_488_661_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_488_661_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">imageUpdate():x=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> x </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,y=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> y </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,w=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> w </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,h=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> h);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        repaint();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        <BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">((flags </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000"> ALLBITS) </SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>            </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        </SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>            </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_696_711_Open_Image onclick="this.style.display='none'; Codehighlighter1_696_711_Open_Text.style.display='none'; Codehighlighter1_696_711_Closed_Image.style.display='inline'; Codehighlighter1_696_711_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_696_711_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_696_711_Closed_Text.style.display='none'; Codehighlighter1_696_711_Open_Image.style.display='inline'; Codehighlighter1_696_711_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> update(Graphics g)</SPAN><SPAN id=Codehighlighter1_696_711_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_696_711_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>        paint(g);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>
<P> </P><img src ="http://www.blogjava.net/leon/aggbug/15217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-10-11 10:35 <a href="http://www.blogjava.net/leon/archive/2005/10/11/15217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Download] Java 2D API 程序员指南</title><link>http://www.blogjava.net/leon/archive/2005/09/13/12897.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 13 Sep 2005 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/09/13/12897.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/12897.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/09/13/12897.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/12897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/12897.html</trackback:ping><description><![CDATA[Programmer's Guide to the JavaTM 2D API 中文版<br /><br /><a href="/Files/leon/Java2DAPI程序员指南.rar">http://www.blogjava.net/Files/leon/Java2DAPI程序员指南.rar</a><img src ="http://www.blogjava.net/leon/aggbug/12897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-09-13 17:09 <a href="http://www.blogjava.net/leon/archive/2005/09/13/12897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AWT中图像的异步加载和等待图像的完全加载</title><link>http://www.blogjava.net/leon/archive/2005/07/12/7533.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 12 Jul 2005 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/07/12/7533.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/7533.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/07/12/7533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/7533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/7533.html</trackback:ping><description><![CDATA[
		<p>
				<font style="background-color: rgb(255, 255, 255);">
						<strong>图像的异步加载</strong>
				</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">图像的加载和显示是异步进行的，图像
的生产者(ImageProducer)传递给图像的消费者(ImageConsumer)一个与图像相关的位，因为图像的生产过程是一个异步行为，所以
AWT 也提供一个图像观察(ImageObserver)，用来监视图像生产者的图像生产过程。</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">因为 java.awt.Component 实现 ImageObserver 接口，所以 AWT 中每个构件都是ImageObserver ，当一个给定的 ImageProducer 采取异步操作时，这个 ImageObserver 可以选择是否被更新。</font>
		</p>
		<font style="background-color: rgb(255, 255, 255);">现在看一个例子：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.net.URL;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.applet.Applet;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.awt.Graphics;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.awt.Image;<br /><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> ImageTestAppletSimple2<br />    </span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);"> Applet {<br />  </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> Image im;<br /><br />  </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> init() {<br />    im </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> getImage(getCodeBase(), </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">lena.jpg</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />  }<br /><br />  </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> paint(Graphics g) {<br />    System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">drawing image</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />    System.out.println(g.drawImage(im, </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">));<br />  }<br />}</span></div><br /></font>
		<p>
				<font style="background-color: rgb(255, 255, 255);">当这个 Applet 第一次被调用时，将打印出下面的结果：<br /><span style="color: rgb(0, 0, 0);">drawing image...<br /></span><span style="color: rgb(0, 0, 0);">false<br /></span><span style="color: rgb(0, 0, 0);">drawing image...<br /></span><span style="color: rgb(0, 0, 0);">false<br /></span><span style="color: rgb(0, 0, 0);">drawing image...<br /></span><span style="color: rgb(0, 0, 0);">false<br /></span><span style="color: rgb(0, 0, 0);">drawing image...<br /></span><span style="color: rgb(0, 0, 0);">true<br /><br /></span>执
行结果说明 drawImage() 在第一次被调用时，没有图像被加载，drawImage() 只是向和图像相关的 ImageProducer
注册 ImageObserver，图像被完全加载前 drawImage() 方法返回 false 直到图像被完全加载返回 true。</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">当 drawImage()
返回之后，只要有图像的新的部分被加载，ImageObserver 中的 imageUpdate() 方法就会被调用。当
ImageObserver 是 AWT 构件时，Component.imageUpdate() 调用 repaint()
方法清除构件背景并调用 paint() 方法重绘刚刚得到的图像位。重复循环，ImageProducer 加载图像的下一块，调用
ImageObserver 的 imageUpdate()。当图像被完全加载时，ImageProducer 停止调用
ImageObserver 的 imageUpdate()，循环中断。</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">load -&gt; imageUpdate() -&gt; repaint() -&gt; update() -&gt; paint()<br /><br /><br /></font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">
						<strong>
								<font size="3">等待图像的完全加载<br /><br /></font>
						</strong>上面的例子介绍了图像的异步加载，现在介绍2个方法使图像完全加载前不显示。<br /><br />·重载 ImageObserver 中的 imageUpdate() 方法，使其在图像完全加载前不调用 repaint()。</font>
		</p>
		<p>
				<br />
				<font style="background-color: rgb(255, 255, 255);">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.applet.Applet;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.awt.Graphics;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.awt.Image;<br /><br /></span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">class</span>
								<span style="color: rgb(0, 0, 0);"> ImageTestAppletWithUpdate<br />    </span>
								<span style="color: rgb(0, 0, 255);">extends</span>
								<span style="color: rgb(0, 0, 0);"> Applet {<br />  </span>
								<span style="color: rgb(0, 0, 255);">private</span>
								<span style="color: rgb(0, 0, 0);"> Image im;<br /><br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> init() {<br />    im </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> getImage(getCodeBase(), </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">lena.jpg</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br />  }<br /><br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> paint(Graphics g) {<br />    g.drawImage(im, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">, </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">);<br />  }<br /><br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">boolean</span>
								<span style="color: rgb(0, 0, 0);"> imageUpdate(Image image, </span>
								<span style="color: rgb(0, 0, 255);">int</span>
								<span style="color: rgb(0, 0, 0);"> flags, </span>
								<span style="color: rgb(0, 0, 255);">int</span>
								<span style="color: rgb(0, 0, 0);"> x, </span>
								<span style="color: rgb(0, 0, 255);">int</span>
								<span style="color: rgb(0, 0, 0);"> y, </span>
								<span style="color: rgb(0, 0, 255);">int</span>
								<span style="color: rgb(0, 0, 0);"> w, </span>
								<span style="color: rgb(0, 0, 255);">int</span>
								<span style="color: rgb(0, 0, 0);"> h) {<br />    System.out.println(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">imageUpdate():x=</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> x </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">,y=</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> y </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">,w=</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> w </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">,h=</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">
										<br />                       h);<br /><br />    </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);"> ( (flags </span>
								<span style="color: rgb(0, 0, 0);">&amp;</span>
								<span style="color: rgb(0, 0, 0);"> ALLBITS) </span>
								<span style="color: rgb(0, 0, 0);">==</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">) {<br />      </span>
								<span style="color: rgb(0, 0, 255);">return</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">true</span>
								<span style="color: rgb(0, 0, 0);">; </span>
								<span style="color: rgb(0, 128, 0);">//</span>
								<span style="color: rgb(0, 128, 0);"> need more updates</span>
								<span style="color: rgb(0, 128, 0);">
										<br />
								</span>
								<span style="color: rgb(0, 0, 0);">    }<br />    </span>
								<span style="color: rgb(0, 0, 255);">else</span>
								<span style="color: rgb(0, 0, 0);"> {<br />      repaint();<br />      </span>
								<span style="color: rgb(0, 0, 255);">return</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">false</span>
								<span style="color: rgb(0, 0, 0);">; </span>
								<span style="color: rgb(0, 128, 0);">//</span>
								<span style="color: rgb(0, 128, 0);"> image is fully loaded</span>
								<span style="color: rgb(0, 128, 0);">
										<br />
								</span>
								<span style="color: rgb(0, 0, 0);">    }<br />  }<br />}</span>
						</div>
				</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">使用 java.awt.MediaTracker 类跟踪图像的加载，不必重载 imageUpdate() 方法。</font>
		</p>
		<p>
				<br />
				<font style="background-color: rgb(255, 255, 255);">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.net.URL;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.applet.Applet;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.awt.Graphics;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.awt.Image;<br /></span>
								<span style="color: rgb(0, 0, 255);">import</span>
								<span style="color: rgb(0, 0, 0);"> java.awt.MediaTracker;<br /><br /></span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">class</span>
								<span style="color: rgb(0, 0, 0);"> ImageTestAppletWithMediaTracker<br />    </span>
								<span style="color: rgb(0, 0, 255);">extends</span>
								<span style="color: rgb(0, 0, 0);"> Applet {<br />  </span>
								<span style="color: rgb(0, 0, 255);">private</span>
								<span style="color: rgb(0, 0, 0);"> Image im;<br /><br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> init() {<br />    im </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> getImage(getCodeBase(), </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">lena.jpg</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br /><br />    MediaTracker tracker </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">new</span>
								<span style="color: rgb(0, 0, 0);"> MediaTracker(</span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">);<br />    tracker.addImage(im, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">);<br />    </span>
								<span style="color: rgb(0, 0, 255);">try</span>
								<span style="color: rgb(0, 0, 0);"> {<br />      tracker.waitForID(</span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">);<br />    }<br />    </span>
								<span style="color: rgb(0, 0, 255);">catch</span>
								<span style="color: rgb(0, 0, 0);"> (InterruptedException e) {<br />      e.printStackTrace();<br />    }<br /><br />    System.out.print(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">Image width = </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> im.getWidth(</span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">));<br />    System.out.println(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">height = </span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);"> im.getHeight(</span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">));<br />  }<br /><br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> paint(Graphics g) {<br />    g.drawImage(im, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">, </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">);<br />  }<br />}</span>
						</div>
				</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">我们可以把使用 java.awt.MediaTracker 类将图像完全加载的方法包装成一个实用方法</font>
		</p>
		<p>
				<font style="background-color: rgb(255, 255, 255);">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
								<span style="color: rgb(0, 128, 0);">/**</span>
								<span style="color: rgb(0, 128, 0);"> </span>
								<span style="color: rgb(0, 128, 0);">*//**</span>
								<span style="color: rgb(0, 128, 0);">
										<br />   * 使用 java.awt.MediaTracker 将图像完全加载。<br />   * </span>
								<span style="color: rgb(128, 128, 128);">@param</span>
								<span style="color: rgb(0, 128, 0);"> component Component<br />   * </span>
								<span style="color: rgb(128, 128, 128);">@param</span>
								<span style="color: rgb(0, 128, 0);"> img Image<br />   </span>
								<span style="color: rgb(0, 128, 0);">*/</span>
								<span style="color: rgb(0, 0, 0);">
										<br />  </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">static</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> waitForImage(Component component, Image img) {<br />    MediaTracker tracker </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">new</span>
								<span style="color: rgb(0, 0, 0);"> MediaTracker(component);<br />    </span>
								<span style="color: rgb(0, 0, 255);">try</span>
								<span style="color: rgb(0, 0, 0);"> {<br />      tracker.addImage(img, </span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">);<br />      tracker.waitForID(</span>
								<span style="color: rgb(0, 0, 0);">0</span>
								<span style="color: rgb(0, 0, 0);">);<br />    }<br />    </span>
								<span style="color: rgb(0, 0, 255);">catch</span>
								<span style="color: rgb(0, 0, 0);"> (InterruptedException ex) {<br />      ex.printStackTrace();<br />    }<br />  }</span>
						</div>
						<br />
				</font>
		</p>
<img src ="http://www.blogjava.net/leon/aggbug/7533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-07-12 10:33 <a href="http://www.blogjava.net/leon/archive/2005/07/12/7533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AWT中加载和显示图像的方法</title><link>http://www.blogjava.net/leon/archive/2005/07/12/7532.html</link><dc:creator>leon</dc:creator><author>leon</author><pubDate>Tue, 12 Jul 2005 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/leon/archive/2005/07/12/7532.html</guid><wfw:comment>http://www.blogjava.net/leon/comments/7532.html</wfw:comment><comments>http://www.blogjava.net/leon/archive/2005/07/12/7532.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/leon/comments/commentRss/7532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leon/services/trackbacks/7532.html</trackback:ping><description><![CDATA[正文<A HREF="/leon/leon/leon/articles/7494.html"><BR>http://www.blogjava.net/leon/articles/7494.html</A><BR><img src ="http://www.blogjava.net/leon/aggbug/7532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leon/" target="_blank">leon</a> 2005-07-12 10:31 <a href="http://www.blogjava.net/leon/archive/2005/07/12/7532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>