﻿<?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-Swing</title><link>http://www.blogjava.net/Swing/</link><description>&lt;font size="3"&gt;&lt;br&gt;&lt;font color="#669933"&gt;&lt;em&gt;天行健  君子以自强不息&lt;/em&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;
</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 14:34:23 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 14:34:23 GMT</pubDate><ttl>60</ttl><item><title>博客转移，请访问 www.wiui.net</title><link>http://www.blogjava.net/Swing/archive/2011/03/16/346374.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Wed, 16 Mar 2011 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2011/03/16/346374.html</guid><description><![CDATA[本博客转移到 www.wiui.net
<img src ="http://www.blogjava.net/Swing/aggbug/346374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2011-03-16 12:08 <a href="http://www.blogjava.net/Swing/archive/2011/03/16/346374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TWaver中文社区8月1号正式开放_TWaver最好的技术社区</title><link>http://www.blogjava.net/Swing/archive/2010/08/03/327790.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 03 Aug 2010 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/08/03/327790.html</guid><description><![CDATA[<span style="color: #008000">TWaver中文社区将为广大TWaver用户及UI开发爱好者提供一个专业的交流平台，并为广大开发者提供丰富、高质量、原创的技术文章。在这里您可以看到优秀的UI技术文章；也可以交流JAVA Swing/AWT/SWT/JavaFx、Flex、Silverlight/WPF、JavaScript/Ajax、SVG、GIS技术，查找或提出技术问题，共同交流分析相关UI技术，分享行业动态及共享资料。<br />
&nbsp;　　TWaver中文社区包括技术文章区与中文论坛区两大部分。技术文章区将时刻更新记录最有价值和技术含量的TWaver技术文章，在这里您可以一览无余TWaver技术精华；中文论坛包括了各产品分支的技术讨论，UI技术交流以及行业动态，这里将是您学习TWaver与分享学习经验得绝佳平台。<br />
立刻点击进入TWaver中文社区<br />
&nbsp;<br />
&nbsp;　　技术文章区：<a href="http://twaver.servasoft.com/">http://twaver.servasoft.com/</a><br />
&nbsp;　　中文论坛区：<a href="http://twaver.servasoft.com/forum/ ">http://twaver.servasoft.com/forum/ </a></span>
<img src ="http://www.blogjava.net/Swing/aggbug/327790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-08-03 09:57 <a href="http://www.blogjava.net/Swing/archive/2010/08/03/327790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nativeFont和logicalFont在JDK1.4下的重大效率差异</title><link>http://www.blogjava.net/Swing/archive/2010/08/02/327745.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Mon, 02 Aug 2010 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/08/02/327745.html</guid><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: #008000; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">
<p><font face="宋体" size="4"></p>
<p>最近遇到一个很奇怪的问题，写了一个界面程序，刚开始没有 设置字体，效率还可以，但是默认字体看着比较难看，就改用了一个字体，谁知道在jdk1.4批量测试过程中，效率居然比原来要低非常非常的多。<br />
后来发现如果是jdk1.5及以上版本两者效率几乎一样，见附件截图。<br />
而且就Swing效率和增强功能来讲，JDK1.6u10及以上版本有非常大的提高，<br />
所以如果条件运行，还是建议都改成JDK1.6u10及以上版本</font></p>
<p><font face="宋体" size="4">测试代码如下:</font></p>
<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">
<p><font face="宋体" size="4"></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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000"><br />
<img id="Codehighlighter1_38_2749_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_2749_Open_Text.style.display='none'; Codehighlighter1_38_2749_Closed_Image.style.display='inline'; Codehighlighter1_38_2749_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_38_2749_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_38_2749_Closed_Text.style.display='none'; Codehighlighter1_38_2749_Open_Image.style.display='inline'; Codehighlighter1_38_2749_Open_Text.style.display='inline';" alt="" 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;FontDemo&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;JPanel&nbsp;</span><span id="Codehighlighter1_38_2749_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_38_2749_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_81_305_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_305_Open_Text.style.display='none'; Codehighlighter1_81_305_Closed_Image.style.display='inline'; Codehighlighter1_81_305_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_81_305_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_81_305_Closed_Text.style.display='none'; Codehighlighter1_81_305_Open_Image.style.display='inline'; Codehighlighter1_81_305_Open_Text.style.display='inline';" alt="" 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_81_305_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_81_305_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JFrame();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setTitle(</span><span style="color: #000000">"</span><span style="color: #000000">TWaver中文社区</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setContentPane(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FontDemo());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setSize(</span><span style="color: #000000">800</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">600</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setLocationRelativeTo(</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.setVisible(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;TDataBox&nbsp;box&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TDataBox();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;BarChart&nbsp;chart&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BarChart(box);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;times&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1000</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;style&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Font.BOLD;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_536_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_536_580_Open_Text.style.display='none'; Codehighlighter1_536_580_Closed_Image.style.display='inline'; Codehighlighter1_536_580_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_536_580_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_536_580_Closed_Text.style.display='none'; Codehighlighter1_536_580_Open_Image.style.display='inline'; Codehighlighter1_536_580_Open_Text.style.display='inline';" alt="" 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;FontDemo()&nbsp;</span><span id="Codehighlighter1_536_580_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_536_580_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initBox();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initChart();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initGUI();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_607_788_Open_Image" onclick="this.style.display='none'; Codehighlighter1_607_788_Open_Text.style.display='none'; Codehighlighter1_607_788_Closed_Image.style.display='inline'; Codehighlighter1_607_788_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_607_788_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_607_788_Closed_Text.style.display='none'; Codehighlighter1_607_788_Open_Image.style.display='inline'; Codehighlighter1_607_788_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initGUI()&nbsp;</span><span id="Codehighlighter1_607_788_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_607_788_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BorderLayout());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JScrollPane&nbsp;pane&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JScrollPane(chart.getLegendPane());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.add(chart,&nbsp;BorderLayout.CENTER);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.add(pane,&nbsp;BorderLayout.EAST);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_815_2396_Open_Image" onclick="this.style.display='none'; Codehighlighter1_815_2396_Open_Text.style.display='none'; Codehighlighter1_815_2396_Closed_Image.style.display='inline'; Codehighlighter1_815_2396_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_815_2396_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_815_2396_Closed_Text.style.display='none'; Codehighlighter1_815_2396_Open_Image.style.display='inline'; Codehighlighter1_815_2396_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initBox()&nbsp;</span><span id="Codehighlighter1_815_2396_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_815_2396_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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;List&nbsp;localFonts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;nativeFonts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;get&nbsp;all&nbsp;available&nbsp;fontFamily&nbsp;names</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Font[]&nbsp;fonts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SunGraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();<br />
<img id="Codehighlighter1_1065_1246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1065_1246_Open_Text.style.display='none'; Codehighlighter1_1065_1246_Closed_Image.style.display='inline'; Codehighlighter1_1065_1246_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1065_1246_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1065_1246_Closed_Text.style.display='none'; Codehighlighter1_1065_1246_Open_Image.style.display='inline'; Codehighlighter1_1065_1246_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;fonts.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1065_1246_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1065_1246_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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: #008000">//</span><span style="color: #008000">&nbsp;separate&nbsp;logical&nbsp;and&nbsp;native&nbsp;font</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1161_1196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1161_1196_Open_Text.style.display='none'; Codehighlighter1_1161_1196_Closed_Image.style.display='inline'; Codehighlighter1_1161_1196_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1161_1196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1161_1196_Closed_Text.style.display='none'; Codehighlighter1_1161_1196_Open_Image.style.display='inline'; Codehighlighter1_1161_1196_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(SunGraphicsEnvironment.isLogicalFont(fonts[i]))&nbsp;</span><span id="Codehighlighter1_1161_1196_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1161_1196_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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;localFonts.add(fonts[i]);<br />
<img alt="" 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 id="Codehighlighter1_1206_1242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1206_1242_Open_Text.style.display='none'; Codehighlighter1_1206_1242_Closed_Image.style.display='inline'; Codehighlighter1_1206_1242_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1206_1242_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1206_1242_Closed_Text.style.display='none'; Codehighlighter1_1206_1242_Open_Image.style.display='inline'; Codehighlighter1_1206_1242_Open_Text.style.display='inline';" alt="" 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">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1206_1242_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1206_1242_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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;nativeFonts.add(fonts[i]);<br />
<img alt="" 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 alt="" 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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">/////////////&nbsp;localFonts&nbsp;test&nbsp;/////////////</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_1364_1783_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1364_1783_Open_Text.style.display='none'; Codehighlighter1_1364_1783_Closed_Image.style.display='inline'; Codehighlighter1_1364_1783_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1364_1783_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1364_1783_Closed_Text.style.display='none'; Codehighlighter1_1364_1783_Open_Image.style.display='inline'; Codehighlighter1_1364_1783_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;localFonts.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1364_1783_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1364_1783_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Font&nbsp;font&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Font)&nbsp;localFonts.get(i);<br />
<img alt="" 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">long</span><span style="color: #000000">&nbsp;start&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis();<br />
<img id="Codehighlighter1_1486_1513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1486_1513_Open_Text.style.display='none'; Codehighlighter1_1486_1513_Closed_Image.style.display='inline'; Codehighlighter1_1486_1513_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1486_1513_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1486_1513_Closed_Text.style.display='none'; Codehighlighter1_1486_1513_Open_Image.style.display='inline'; Codehighlighter1_1486_1513_Open_Text.style.display='inline';" alt="" 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">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;times;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1486_1513_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1486_1513_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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;createFont(font);<br />
<img alt="" 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 alt="" 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">long</span><span style="color: #000000">&nbsp;spendTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;start;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.setName(font.getName());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.putChartValue(spendTime);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.putChartColor(Color.GREEN);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box.addElement(n);<br />
<img alt="" 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: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("&gt;"&nbsp;+&nbsp;spendTime&nbsp;+&nbsp;"\t"&nbsp;+&nbsp;font.getName());</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\n/////////////&nbsp;nativeFonts&nbsp;test&nbsp;/////////////</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_1905_2323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1905_2323_Open_Text.style.display='none'; Codehighlighter1_1905_2323_Closed_Image.style.display='inline'; Codehighlighter1_1905_2323_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1905_2323_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1905_2323_Closed_Text.style.display='none'; Codehighlighter1_1905_2323_Open_Image.style.display='inline'; Codehighlighter1_1905_2323_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;nativeFonts.size();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1905_2323_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1905_2323_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Font&nbsp;font&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Font)&nbsp;nativeFonts.get(i);<br />
<img alt="" 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">long</span><span style="color: #000000">&nbsp;start&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis();<br />
<img id="Codehighlighter1_2028_2055_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2028_2055_Open_Text.style.display='none'; Codehighlighter1_2028_2055_Closed_Image.style.display='inline'; Codehighlighter1_2028_2055_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2028_2055_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2028_2055_Closed_Text.style.display='none'; Codehighlighter1_2028_2055_Open_Image.style.display='inline'; Codehighlighter1_2028_2055_Open_Text.style.display='inline';" alt="" 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">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;times;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_2028_2055_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2028_2055_Open_Text"><span style="color: #000000">{<br />
<img alt="" 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;createFont(font);<br />
<img alt="" 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 alt="" 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">long</span><span style="color: #000000">&nbsp;spendTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis()&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;start;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Node();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.setName(font.getName());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.putChartValue(spendTime);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.putChartColor(Color.RED);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box.addElement(n);<br />
<img alt="" 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: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("&gt;"&nbsp;+&nbsp;spendTime&nbsp;+&nbsp;"\t"&nbsp;+&nbsp;font.getName());</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_2435_2518_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2435_2518_Open_Text.style.display='none'; Codehighlighter1_2435_2518_Closed_Image.style.display='inline'; Codehighlighter1_2435_2518_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2435_2518_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2435_2518_Closed_Text.style.display='none'; Codehighlighter1_2435_2518_Open_Image.style.display='inline'; Codehighlighter1_2435_2518_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;createFont(Font&nbsp;font)&nbsp;</span><span id="Codehighlighter1_2435_2518_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2435_2518_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.deriveFont(style,&nbsp;size);</span><span style="color: #008000"><br />
<img alt="" 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">new</span><span style="color: #000000">&nbsp;Font(font.getName(),&nbsp;style,&nbsp;size);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_2547_2747_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2547_2747_Open_Text.style.display='none'; Codehighlighter1_2547_2747_Closed_Image.style.display='inline'; Codehighlighter1_2547_2747_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2547_2747_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2547_2747_Closed_Text.style.display='none'; Codehighlighter1_2547_2747_Open_Image.style.display='inline'; Codehighlighter1_2547_2747_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;initChart()&nbsp;</span><span id="Codehighlighter1_2547_2747_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2547_2747_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.setLegendLayout(TWaverConst.LEGEND_LAYOUT_VERTICAL);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.setLegendOrientation(TWaverConst.LABEL_ORIENTATION_HORIZONTAL);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.setYScaleTextVisible(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart.setShadowOffset(</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
</font></span></span>
<p><br />
<br />
<font face="宋体" size="4">1.4测试结果<br />
</font><img height="596" alt="" src="http://www.blogjava.net/images/blogjava_net/swing/blog/1.4.png" width="798" border="0" /><br />
<br />
<font face="宋体" size="4">1.6测试结果<br />
<img height="581" alt="" src="http://www.blogjava.net/images/blogjava_net/swing/blog/1.6.png" width="823" border="0" /></font></p>
<p><br />
<br />
<a href="http://twaver.servasoft.com/?p=1320">原帖地址</a></span></span></p>
 <img src ="http://www.blogjava.net/Swing/aggbug/327745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-08-02 21:32 <a href="http://www.blogjava.net/Swing/archive/2010/08/02/327745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>苹果成功秘诀：十大关键因素使其与众不同</title><link>http://www.blogjava.net/Swing/archive/2010/06/28/324642.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Mon, 28 Jun 2010 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/06/28/324642.html</guid><description><![CDATA[<p style="text-indent: 2em"><span style="color: #008000">2010年5月26日下午2点30分，苹果公司成为技术领域的最大公司，并且仅次于埃克森美孚公司，成为全美第二大公司。在过去的数月间，苹果公司的市值一直咬紧微软公司。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">过去数年间，苹果公司的发展历程恰似航天火箭的发射过程———一系列快速紧密有序的爆炸而后直冲苍穹。苹果公司本身，它的领导者及它的产品已经变成了一种文化上的通用语。戴尔公司想成为商业领域的苹果公司，Zipcar亦想在汽车共享领域成为苹果公司，戏剧演员比尔&#183;马赫甚至说，如果苹果公司总裁做总统，政府将能提供更好的服务。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">一个公司或个人怎样才能成为&#8220;某某领域的苹果&#8221;？在与苹果公司前雇员，现任合伙人以及其他一些长期关注苹果的专业人士进行探讨交流后，我们可以清晰地看到这个问题的答案，它们围绕以下十大关键因素展开。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">1</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">不落俗套</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">在 1980年代领导苹果工作团队设计产品时，在&#8220;</span><a class="a-tips-Article-QQ" href="http://digi.qq.com/nbook/nbook.shtml" target="_blank"><span style="color: #008000">笔记本</span></a><span style="color: #008000">看起来应该像什么&#8221;这个问题上，斯蒂芬&#183;乔布斯经常亲自指导工程师们。&#8220;有一次他在百货商店看到一个异常精美的厨具&#8221;，安迪&#183;赫兹菲尔德说，&#8220;然后他就要求设计师把笔记本设计成他看到的那个模样&#8221;&#8220;还有一次他要设计师把产品设计成保时捷的模样&#8221;。安迪&#183; 赫兹菲尔德是苹果创始工程师之一，并著有《硅谷里的革命：苹果公司成长的伟大历史》一书。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">计算机看起来更应该像跑车和厨具，而苹果公司的追随者恰是高端人群———那些已买或者是将买保时捷的人。很明显，仅通过跟随硅谷的市场动向，通过技术专家或是其它俗套的设计，你很难吸引他们。而苹果的魔力，恰恰在于自己钻研，从而不落俗套地吸引其目标客户。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">2</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">逾越常规</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">技术专家普遍认为，源代码开放是大势所趋，且体现共享原则。在这一背景下，苹果被视为略显封闭。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">但在苹果的哲学里，封闭与自由并不冲突。&#8220;我们正竭尽所能的让用户体验到预想效果，&#8221;乔布斯在给莱恩&#183;塔特的电子邮件中写道。此前，莱恩在博客中抨击苹果禁止在iPhone和iPad上使用Flash技术。&#8220;你可以不赞同我们，但我们的动机是纯洁的。&#8221;乔布斯写道，&#8220;禁止该技术是因为苹果商店提供了太多自由，你能买到盗取个人隐私的程序，也能买到摧毁电池的程序，还能买色情影片。&#8221;</span></p>
<p style="text-indent: 2em"><span style="color: #008000">尽管如此，程序员们一直抱怨苹果商店过于封闭，他们认为苹果商店在设计应用程序上一直持独裁态度。即问题不在于它是封闭的，而在于它在规则制定方面是独断专行的，隐蔽的，频繁变动的。如果苹果公司能放宽透明度，就能避免上述大部分争议。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">但根本上，苹果不在乎争议。虽然批判仍在持续，但是苹果商店已经取得了巨大的成功，就连其反对者也不得不承认它极其便捷且妙趣横生。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">3</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">拒绝复杂</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">&#8220;拒绝&#8221;可能是乔布斯在苹果公司所扮演的首要角色。&#8220;他简直是个过滤器，&#8221;苹果电脑工程师赫兹菲尔德说。每一天都会有设计者向乔布斯展示关于新产品和在现有产品上加入新特征的创意，而他的回答几乎都是拒绝。&#8220;我为那些我们没有去做的产品感到骄傲，正如同我为那些我们做出来的产品感到骄傲一样。&#8221;乔布斯在 2004年接受采访时说。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">乔布斯拒绝的原因，不仅出于对复杂设计的一贯反感，还有成本考虑，并制造期待效应。对一些复杂的设计说不可以使成本降得更低，减少一些产品的特征还能制造一种期待。&#8220;故意忽略一项人们想拥有的产品特征，会激发人们对它的渴望。&#8221;苹果公司的前工程师雷德说，&#8220;当你在新版本中将这个功能加入时，用户得偿所愿，则更加高兴。&#8221;</span></p>
<p style="text-indent: 2em"><span style="color: #008000">苹果公司一遍又一遍地运用着这个策略，最新的例子是iPhone O S4，它添加了多任务操作功能。事实上，该功能用户们从2007年起就开始要求。再来看看iPad，真的没法添加摄像装置吗？</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">4</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">服务客户</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">不管你的产品有多好，它总有出问题的时候。近年来，在笔记本和手机领域，苹果的竞争对手们大多采取回避客户而非服务客户的策略。它们关掉了自身的客户服务部门，并将这项业务外包给由低薪员工组成的电话服务中心。它们甚至要客户自己去网上寻找常见问题的解答。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">而二十年前，苹果公司制订零售策略时，就明确了一个压倒一切的优先目标，即创立一种让客户完全联想不到计算机工业的零售商店。他们致力于在商店中营造一种类似四季酒店大堂的友好氛围。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">G eniusB ar 便是代表。G eniusBar里的工作人员会为你诊断每一款苹果公司的产品，而不管你从哪里买的。除非过了保质期，公司对上述服务不收取任何费用。苹果公司为何如此慷慨呢？曾在G enius Bar工作过的德尔说：&#8220;有时候客户进来时是为寻求帮助，但在离开时却购买了新产品。&#8221;</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">5</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">忽略意见</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">乔布斯总是在各种场合频繁引用亨利&#183;福特的名言：&#8220;如果我问客户他们需要什么，他们总是说要&#8216;一匹更快的马！&#8217;&#8221;</span></p>
<p style="text-indent: 2em"><span style="color: #008000">乔布斯用这句话，来说明苹果公司所信奉的哲学，即人们预想不到他们真正需要的东西。客户会告诉你一大堆他们所需要的东西，但是当你按照他们的意图制造出来时，这又不是他们想要的。将那些尚不存在的东西形象化，并不是一件容易的事。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">不过乔布斯也不是将客户的反馈视为无物。他将其看做是鼓舞，而非方向；是方式，而非结果。所以苹果总是能推出既能满足客户需求同时又超越客户想象的新产品。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">6</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">处处营销</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">如同G enius Bar已被证明是天才创意一样，如今风行全球的苹果宣传口号&#8220;换种方式思考&#8221;也被证明不是空话，因为苹果粉丝们的思考方式确实与众不同。粉丝对苹果的忠诚度堪比基督徒对耶稣的忠诚度。苹果的品牌是如此的强大和有吸引力，以至于对有些人而言，苹果已经成了一种信仰。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">苹果公司通过一系列精细入微的方式，来培养粉丝对苹果品牌的宗教般的狂热。包括渲染产品的神秘等。而最重要的方式，是强化苹果产品的象征意义，最有效的市场营销策略则植根于产品本身。苹果公司用颜色、声音、形状等元素的组合，构建了清晰的品牌形象。苹果通过这些策略使其品牌形象深植人心。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">这一点在苹果发布新产品时表现得尤为明显。通过一系列统一协调的步骤，苹果调动大众的胃口，吸引更多人关注。在公众的注意力高度集中时，苹果再适时对外公布其早就准备好的信息或新产品。这一切都是围绕着营销进行的。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">7</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">推陈出新</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">如果有天苹果推出了一款没有桌面的电脑，请不要感到惊讶。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">仅仅是幻想吗？绝对不是，这些都将写进苹果的专利申请文件里。虽然还没有看到这些产品，但我们丝毫不应怀疑苹果的创新能力。事实上，没有任何一家公司像苹果那样频繁地对所在领域的基础环节进行反思和重构。仅仅在过去的短短几年间，苹果公司就对其笔记本电脑的生产工艺进行了大幅度革新，这也是笔记本生产设计领域有史以来所进行的最迅捷最大规模的革新，除苹果外，没有任何其它公司做到这些。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">苹果完全无视IT领域所强调的兼容性的概念，这对诸如微软这样的竞争者来说是福亦是祸。在苹果公司的历史上，它数次采用新的操作系统和新的芯片构造，这些决定总是使它原来的生产组装基地立刻变得过时。苹果总是不停地否定过去设计中的不合理及不足之处，不断地推陈出新，使其产品总能以独特的风格傲立于时代前沿。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">8</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">适当&#8220;独裁&#8221;</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">2000年，作为苹果阿斯塔特美国业务分部的运营经理，麦克&#183;伊万杰李斯特负责D V D刻录技术研发，即将这种D V D装在高端电脑上，并且在未来将其转变为iD V D。该项目界面呈现出来的，是多种多样的窗口和菜单选项，以及大段的功能解释文字。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">&#8220;这时乔布斯走了进来，&#8221;伊万杰李斯特回忆说，&#8220;他没有仔细看我们的工作，而是在白板画了一个框。&#8221;&#8220;这就是新设计。&#8221;乔布斯说，&#8220;只要一个窗口，将音像资料推入窗口，然后点击一个叫播放的按钮，这是我们要的。&#8221;</span></p>
<p style="text-indent: 2em"><span style="color: #008000">&#8220;所有人呆若木鸡，&#8221;伊万杰李斯特说，这种风格与他以前所就职的公司迥异。技术领域追求具有包容性的、彻底的、集合大众智慧的创新。而苹果的工程师则要花费 100%的时间去设计由一小部分资深经理或是乔布斯一个人计划的产品。有权做出决策的人是如此之少，以至于苹果一年仅能够推出一项或两项创新产品。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">9</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">重新发明</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">&#8220;革命性&#8221;是乔布斯最喜欢的词之一。他极力夸赞苹果的每个发明创造都是独一无二的和有创造性的。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">苹果的产品到底具不具有革命性，取决于我们对革命性这个词的定义。苹果公司擅于搜集汇总技术领域的最新创意，并通过转化将其变为己有。苹果擅长发现别的同类产品上存在的问题和不足，并在其推出的产品上将上述问题和不足予以解决，或者是对货架上的其它同类产品在苹果的模式下进行改良革新。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">iPad 就是一个典型例子。早在2001年</span><a class="a-tips-Article-QQ" href="http://datalib.tech.qq.com/people/173/index.shtml" target="_blank"><span style="color: #008000">比尔&#183;盖茨</span></a><span style="color: #008000">就推出了一款具备几乎相同功能的建立在w indow s操作系统基础上的产品，但是当时在交互界面，应用软件开发方面存在诸多需要解决的问题，微软公司就没有继续坚持下去。乔布斯发现在苹果公司现有的技术基础上，上述的问题都不成其为问题，于是iPad横空出世。在刚推出的两个月里，iPad就卖出了200万台。</span></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">10</span></strong></p>
<p style="text-indent: 2em"><strong><span style="color: #008000">有条不紊</span></strong></p>
<p style="text-indent: 2em"><span style="color: #008000">在 iPad上市几周后，惠普、微软及其它一些公司相继推迟了同类产品的上市。它们正试图制作出比iPad更加精密、功能更加齐全的产品。它们正致力于创造自己版本的&#8216;快马&#8217;，于是它们推迟面市，又回到了设计室。与此同时，苹果的其它竞争者如Google，Intel等也快马加鞭地在该领域排兵布阵。</span></p>
<p style="text-indent: 2em"><span style="color: #008000">苹果公司并没有为这种竞争态势所牵制，它严格地按照自己的时间表行事。苹果公司的时间表是严格按照其自身的经营策略和长期愿景目标来制定的，其受市场态势和竞争者状况的影响较为轻微，这样苹果公司总能掌握主动权，适时地推出一些新产品，占尽市场先机。</span></p>
<img src ="http://www.blogjava.net/Swing/aggbug/324642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-06-28 10:31 <a href="http://www.blogjava.net/Swing/archive/2010/06/28/324642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义JFrame/JDialog标题栏</title><link>http://www.blogjava.net/Swing/archive/2010/06/25/324512.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Fri, 25 Jun 2010 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/06/25/324512.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 替换/自定义 JFrame/JDialog标题栏<br>setUndecorated后，调整JFrame/JDialog大小<br>自定义JFrame/JDialog 最大化/最小化/关闭按钮<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/Swing/archive/2010/06/25/324512.html'>阅读全文</a><img src ="http://www.blogjava.net/Swing/aggbug/324512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-06-25 21:52 <a href="http://www.blogjava.net/Swing/archive/2010/06/25/324512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing _自定义颜色选择器&amp;颜色选择下拉框</title><link>http://www.blogjava.net/Swing/archive/2010/04/29/319736.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 29 Apr 2010 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/04/29/319736.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Swing_自定义ColorChooser&ColorComboBox<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/Swing/archive/2010/04/29/319736.html'>阅读全文</a><img src ="http://www.blogjava.net/Swing/aggbug/319736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-04-29 22:10 <a href="http://www.blogjava.net/Swing/archive/2010/04/29/319736.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改JTable默认Copy实现</title><link>http://www.blogjava.net/Swing/archive/2010/03/05/314579.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Fri, 05 Mar 2010 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/03/05/314579.html</guid><description><![CDATA[<p><span style="font-size: 10pt; color: #008000">&nbsp;&nbsp; &nbsp;最近有人问，如何在table中Ctrl+C赋值的时候，定制选中的内容。默认情况下是返回value值，但是很多情况下，我们都会定制一些显示，举个例子，取出来的原始位置数据是0，重载renderer以后可能就变成了"右",当我们copy的时候，而我们取到的值仍然是0，而对于客户而言，可能取出"右"可能更有意义，这个时候就需要做一些处理了，如下所示:</span></p>
<p></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000"><span style="color: #000000">table.getActionMap().put(</span><span style="color: #000000">"</span><span style="color: #000000">copy</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;AbstractAction()&nbsp;{<br />
&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><span style="color: #008000"><span style="color: #000000">&nbsp;actionPerformed(ActionEvent&nbsp;e)&nbsp;{<br />
</span><span style="color: #008000">//</span><span style="color: #008000">至于此处如何处理，就看具体的逻辑了</span></span><span style="color: #008000"><br />
</span><span style="color: #008000"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box.getLastSelectedElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;column&nbsp;</span><span style="color: #000000">=</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;table.getSelectedColumn();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;row&nbsp;</span><span style="color: #000000">=</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;table.getSelectedRow();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(column&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;row&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span></span><span style="color: #008000"><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;value&nbsp;</span><span style="color: #000000">=</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;table.getValueAt(row,&nbsp;column);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringSelection&nbsp;stringSelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;StringSelection(value.toString()+"hello");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clipboard&nbsp;clipboard&nbsp;</span><span style="color: #000000">=</span></span><span style="color: #008000"><span style="color: #000000">&nbsp;Toolkit.getDefaultToolkit().getSystemClipboard();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clipboard.setContents(stringSelection,&nbsp;</span><span style="color: #0000ff">null</span></span><span style="color: #000000"><span style="color: #008000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></div>
<p><span style="color: #008000">&nbsp;</span></p>
<img src ="http://www.blogjava.net/Swing/aggbug/314579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-03-05 11:34 <a href="http://www.blogjava.net/Swing/archive/2010/03/05/314579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing DayDayUp之六: QQ风格JTextField</title><link>http://www.blogjava.net/Swing/archive/2010/02/09/312402.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 09 Feb 2010 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/02/09/312402.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: QQ风格JTextField&nbsp;&nbsp;<a href='http://www.blogjava.net/Swing/archive/2010/02/09/312402.html'>阅读全文</a><img src ="http://www.blogjava.net/Swing/aggbug/312402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-02-09 12:06 <a href="http://www.blogjava.net/Swing/archive/2010/02/09/312402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaGUI应用程序部署</title><link>http://www.blogjava.net/Swing/archive/2010/02/05/312114.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Fri, 05 Feb 2010 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/02/05/312114.html</guid><description><![CDATA[<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp; </span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">JavaGUI应用程序部署<br />
</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt"><br />
JavaGUI程序发布分类</span></span></span><br />
<span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1)&nbsp; Applet：可以嵌入到浏览器中，通过网页的方式展示给用户</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2)&nbsp; application ：有两种发布方式</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;&#252; 打包成jar包通过bat的方式运行，或者通过第三方软件打成exe(后续会再详细介绍)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;&#252; 通过Java Web Start的方式发布到服务器端，通过JNLP运行</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;相对来说第二种方式可能更好一些，免除了更新的麻烦。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;用applet或者jws的方式发布，大部分都需要数字签名。<br />
</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt"><br />
<br />
为什么要签名</span></span></span><br />
<span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;其实签名不是必须的，如果你的程序只是单纯的绘图，显示，只要不访问网络资源也不访问本地文件，是不用签名的，<br />
&nbsp;但是如果要访问本地或网上资源就必须签名，<br />
&nbsp;比如读取本地文件或者访问数据库，这是由java的沙箱机制决定的，即jvm内部有一组安全检查规则，要通过检查之后才能访问特定资源。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;如果要突破这个规则，可以有两个方法:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1) 修改jre权限文件如下</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;java.policy为grant {<br />
&nbsp;&nbsp;&nbsp;permission java.security.AllPermission;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;};</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;一般权限文件的目录如下C:"Program Files"Java"jre6"lib"security</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;但是修改每个客户端的权限文件，无论从时间还是操作上都是很麻烦的。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2)&nbsp; 签名，意思就是告诉用户，这个程序是谁发布的，是不是能信任，如果客户确定，ok，这个applet或者jws就可以访问外部资源了。<br />
<br />
</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt"><br />
如何签名</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1)首先确保你已经完全安装了Java2的环境，有keytool工具，它位于JDK的bin目录下。这一般不会有问题。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2)到Dos状态下，进入你需发布应用程序的jar包所在的目录，运行下面这句话<br />
&nbsp;&nbsp; keytool -genkey -keystore myKeystore -alias jwstest -validity 1000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它将会提示你输入用户名、密码等，按照提示随便输入即可，不输入直接回车即可，<br />
&nbsp;&nbsp; 但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore的文件。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;3)如果你想查看一下刚才生成的myKeystore文件的内容，可以使用下面这句话：<br />
&nbsp;&nbsp;keytool -list -keystore myKeystore<br />
&nbsp;&nbsp;显示出来应该类似如下：<br />
&nbsp;&nbsp;Keystore type: jks<br />
&nbsp;&nbsp;Keystore provider: SUN<br />
&nbsp;&nbsp;Your keystore contains 1 entry:<br />
&nbsp;&nbsp;jwstest, Tue Nov 23 19:29:32 PST 2001, keyEntry,<br />
&nbsp;&nbsp;Certificate fingerprint (Test):<br />
&nbsp;&nbsp;C3:A9:CD:F3:D3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;4)对你需发布应用程序的jar包进行签名，运行下面这句话：<br />
&nbsp;&nbsp;jarsigner -keystore myKeystore yourtest.jar jwstest<br />
&nbsp;&nbsp;其中yourtest.jar是你的jar包名，你需要修改它，别的就不必修改了。<br />
&nbsp;&nbsp;运行时会提示你输入密码，就是你刚才在生成myKeystore文件时设定的密码。<br />
</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt"><br />
<br />
如果有很多jar包怎么办</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;在开发的过程中很可能会引用到第三方的jar包，而第三方的jar包又可能引用到其它的，所以可能有很多的jar包，需要和applet一起发布，有两个方法<br />
&nbsp;&nbsp;1) 分别打包签名，使用于包比较少，比如只有3、4个的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) 只 把applet的jar包签名，让用户确认访问授权，applet已经被用户授权，那么就可以在applet里改变安全管理器（SecurityManager）<br />
&nbsp;&nbsp;&nbsp;只需要继承SecurityManager类，创建自己的安全管理器类，然后覆盖checkPermission方法，允许访问任何资源。<br />
&nbsp;&nbsp;&nbsp;在applet的init方法中调用System.setSecurityManager把安全管理器设置为我们自定义的即可。</span></span></span></p>
<p><br />
<span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;class CustomManager extends SecurityManager {<br />
&nbsp;&nbsp;public void checkPermission(Permission perm, Object context) {<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;public void checkPermission(Permission perm) {<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp; </span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">其它一些相关资料如下</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;JDK中keytool常用命令</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;-genkey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名，mykey中包含用户的公钥、私钥和证书 <br />
&nbsp;-alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 产生别名<br />
&nbsp;-keystore&nbsp;&nbsp;&nbsp; 指定密钥库的名称(产生的各类信息将不在.keystore文件中<br />
&nbsp;-keyalg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定密钥的算法&nbsp;&nbsp;&nbsp; <br />
&nbsp;-validity&nbsp;&nbsp;&nbsp; 指定创建的证书有效期多少天<br />
&nbsp;-keysize&nbsp;&nbsp;&nbsp;&nbsp; 指定密钥长度<br />
&nbsp;-storepass&nbsp;&nbsp; 指定密钥库的密码<br />
&nbsp;-keypass&nbsp;&nbsp;&nbsp;&nbsp; 指定别名条目的密码<br />
&nbsp;-dname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定证书拥有者信息 例如：&nbsp; "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"<br />
&nbsp;-list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示密钥库中的证书信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keytool -list -v -keystore sage -storepass ....<br />
&nbsp;-v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示密钥库中的证书详细信息<br />
&nbsp;-export&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将别名指定的证书导出到文件&nbsp; keytool -export -alias caroot -file caroot.crt<br />
&nbsp;-file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数指定导出到文件的文件名<br />
&nbsp;-delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除密钥库中某条目&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keytool -delete -alias sage -keystore sage<br />
&nbsp;-keypasswd&nbsp;&nbsp; 修改密钥库中指定条目口令&nbsp;&nbsp;&nbsp; keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage<br />
&nbsp;-import&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将已签名数字证书导入密钥库&nbsp; keytool -import -alias sage -keystore sagely -file sagely.crt <br />
&nbsp;&nbsp;&nbsp;&nbsp; 导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度，并且把整个CA链全部打印出来。</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keytool 是安全钥匙与证书的管理工具.它管理一个存储了私有钥匙和验证相应公共钥匙的与它们相关联的X.509 证书链的keystore(相当一个数据库).</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keytool 是一个有效的安全钥匙和证书的管理工具. 它能够使用户使用数字签名来管理他们自己的私有/公共钥匙对,管理用来作自我鉴定的相关的证书,管理数据完整性和鉴定服务.它还能使用户在通信时缓存它们的公共钥匙.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;一个证书是某一实体(个人,公司等)的数字签名,指出其他实体的公共钥匙(或其他信息)的详细的值.当数据被签名后,这个签名信息被用来检验数据的完整性和真实性.完整性指数据没有被修改和篡改,真实性指数据从任何产生和签名的一方真正的传输到达.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keytool 把钥匙和证书储存到一个keystore.默任的实现keystore的是一个文件.它用一个密码保护钥匙.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;而另外的一个工具jarsigner用keystore中的信息产生或检验Java aRchive(jar文件)中的数字签名.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore有两个不同的入口:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1.钥匙入口:保存了非常敏感的加密的钥匙信息,并且是用一个保护的格式存储以防止未被授权的访问.以这种形式存储的钥匙是秘密钥匙,或是一个对应证书链中公有钥匙的私有钥匙.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2.信任证书入口:包含一个属于其他部分的单一公共钥匙证书.它之所以被称为"信任证书",是因为keystore信任的证书中的公共钥匙真正属于证书所有者的身份识别.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore的别名:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是 不区分大小写的.如别名Hugo和hugo指向同一个keystore入口.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别名.也可以用-import参数加一个证书或证书链到信任证书.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;如:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -genkey -alias duke -keypass dukekeypasswd</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;其中duke为别名,dukekeypasswd为duke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;假如你想修改密码,可以用:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;将旧密码dukekeypasswd改为newpass.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore的产生:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1.当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2.当用-keystore指定时,将产生指定的keystore.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore的实现:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keytool 类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息. 目前有两个命令行:keytool和jarsinger,一个GUI工具Policy 可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore还有一个sun公司提供的內在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;支持的算法和钥匙大小:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA".假如私有钥匙是"DSA"类型,缺省签名算法是"SHA1withDSA",假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA".</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;证书:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;一个证书是一个实体的数字签名,指出其他实体的公共钥匙有明确的值.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1.公共钥匙 :是同一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名;</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2.数字签名:假如数据已被签名,并用身份存储在一个实体中,一个签名能够证明这个实体知道这个数据.这个数据用实体私有钥匙签名并递交;</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;3.身份:知道实体的方法.在一些系统中身份是公共钥匙,其他系统中可以是从一个X.509名字的邮件地址的Unix UID来的任何东西;</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;4.签名:一个签名用用实体私有钥匙来计算某些加密数据;</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;5.私有钥匙:是一些数字,每一个私有钥匙只能被特定的拥有该私有钥匙的实体知道.私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.一个公共钥匙加密(如DSA),一个私有钥匙与一个正确的公共钥匙通信.私有钥匙用来计算签名.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;6.实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keytool应用实例:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;1.产生一个keystore:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -genkey -alias User(keystore的别名) -keyalg RSA -validity 7 -keystore keystore(指定keystore).</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;运行这个命令,系统提示:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Enter keystore password:yourpassword(输入密码)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is your first and last name?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]: your name(输入你的名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is the name of your organizational unit?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]:your organizational(输入你所在组织单位的名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is the name of your organization?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]:your organization name (输入你所在组织的名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is the name of your City or Locality?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]:your city name(输入所在城市的名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is the name of your State or Province?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]:your provice name(输入所在省份名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;What is the two-letter country code for this unit?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[Unknown]:cn(输入国家名字)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Is CN=your name, OU=your organizaion, O="your organization name",</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;L=your city name, ST=your province name, C=cn correct?</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;[no]: yes</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;2.检查一个keystore:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -list -v -keystore keystore</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Enter keystore password:your password(输入密码)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;将显示keystore內容如:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore type: jks</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Keystore provider: SUN</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Your keystore contains 1 entry</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Alias name: yourname</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Creation date: Dec 20, 2001</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Entry type: keyEntry</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Certificate chain length: 1</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Certificate[1]:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Owner: CN=yourname, OU=your organization, O="your organization name",</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;L=your city name, ST=your province name, C=CN</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Issuer: CN=Duke, OU=Java Software, O="Sun Microsystems, Inc.", L=Palo Alto, ST=CA, C=US</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Serial number: 3c22adc1</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Valid from: Thu Dec 20 19:34:25 PST 2001 until: Thu Dec 27 19:34:25 PST 2001</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Certificate fingerprints:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;MD5: F1:5B:9B:A1:F7:16:CF:25:CF:F4:FF:35:3F:4C:9C:F0</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;SHA1: B2:00:50:DD:B6:CC:35:66:21:45:0F:96:AA:AF:6A:3D:E4:03:7C:74</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;3.输出keystore到一个文件:testkey:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -export -alias duke -keystore keystore -rfc -file testkey</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;系统输出:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Enter keystore password:your password(输入密码)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Certificate stored in file &lt; td&gt;</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;4.输入证书到一个新的truststore:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -import -alias dukecert -file testkey -keystore truststore</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;Enter keystore password:your new password.(输入truststore新密码)</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;5.检查truststore:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;keytool -list -v -keystore truststore</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;系统将显示truststore的信息.</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;现在可以用适当的keystore运行你的应用程序.如:</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=password Server</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;和: java -Djavax.net.ssl.trustStore=truststore</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;-Djavax.net.ssl.trustStorePassword=trustword Client</span></span></span></p>
<p><br />
<span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;by </span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;张涛<br />
&nbsp;&nbsp;&nbsp; zht_dream@hotmail.com</span></span></span></p>
<p><span style="color: #008000"><span style="font-family: 宋体"><span style="font-size: 10pt">&nbsp;</span></span></span></p>
<img src ="http://www.blogjava.net/Swing/aggbug/312114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-02-05 15:16 <a href="http://www.blogjava.net/Swing/archive/2010/02/05/312114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监听JComponent显示事件</title><link>http://www.blogjava.net/Swing/archive/2010/02/04/312027.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 04 Feb 2010 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/Swing/archive/2010/02/04/312027.html</guid><description><![CDATA[<span style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">很多时候，我们需要在界面初始化以后对程序进行某些设置，举个例子，当界面呈现出来以后，设置下</span>SplitPane<span style="font-family: 宋体">的的百分比</span>(<span style="font-family: 宋体">关于这个为什么必须这么处理请参考</span>java<span style="font-family: 宋体">源代码</span>)<span style="font-family: 宋体">。很容易我们就想到给程序添加</span>ComponentListener<span style="font-family: 宋体">监听，然后在监听中作处理，如下所示</span></span></span></span></span></p>
<span style="font-size: 12pt"><span style="font-size: 10pt">
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">panel.addComponentListener(new ComponentAdapter() {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void componentShown(ComponentEvent e) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("panel:shown");</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">但是并没有和我们想象的那样，当组件在界面上显示出来的时候</span>fire<span style="font-family: 宋体">出</span>componentShown<span style="font-family: 宋体">类型的事件的，下面我们通过研究源代码分析下原因</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">首先的问题是在什么地方会</span>fire<span style="font-family: 宋体">出</span>ComponentEvent</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">通过查看源代码，我们可以看到实在</span>Component<span style="font-family: 宋体">的</span>show()<span style="font-family: 宋体">方法中</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">ComponentEvent e = new ComponentEvent(this,ComponentEvent.COMPONENT_SHOWN);</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">Toolkit.getEventQueue().postEvent(e);</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">具体代码，请参考</span>java<span style="font-family: 宋体">源程序</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">也就是说只有在组件调用到</span>setVisible(true)<span style="font-family: 宋体">的时候才会</span>fire<span style="font-family: 宋体">出</span>ComponentEvent</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">但是你会发现，即便是我们调用</span>JComponent<span style="font-family: 宋体">的</span>setVisible(true)<span style="font-family: 宋体">，也不会监听到</span>shown<span style="font-family: 宋体">事件</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">原因主要是</span>JComponent<span style="font-family: 宋体">重载了</span>setVisible<span style="font-family: 宋体">方法</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">如下</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">public void setVisible(boolean aFlag) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(aFlag != isVisible()) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.setVisible(aFlag);</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Container parent = getParent();</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(parent != null) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle r = getBounds();</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.repaint(r.x,r.y,r.width,r.height);</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Some (all should) LayoutManagers do not consider components</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// that are not visible. As such we need to revalidate when the</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// visible bit changes.</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;revalidate();</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; text-indent: 21.75pt; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">因为</span>JComponent<span style="font-family: 宋体">的</span>visible<span style="font-family: 宋体">属性默认就是</span>true<span style="font-family: 宋体">，所以不会调用到</span>Component<span style="font-family: 宋体">的</span>setVisible<span style="font-family: 宋体">方法，所以也不会</span>fire<span style="font-family: 宋体">出</span>ComponentEvent<span style="font-family: 宋体">，当然，如果你调用下</span>JComponent<span style="font-family: 宋体">的</span>setVisible(false)+setVisible(true)<span style="font-family: 宋体">是会</span>fire<span style="font-family: 宋体">出</span>ComponentEvent.COMPONENT_SHOWN<span style="font-family: 宋体">事件的，（但是在里面很可能得不到当前组件的大小信息或者不能</span>SplitPane<span style="font-family: 宋体">设置分割比例，因为这个时候界面还没有初始化），而且如果是</span>JFrame<span style="font-family: 宋体">，</span>JDialog<span style="font-family: 宋体">，</span>JApplet<span style="font-family: 宋体">等也是没问题的，因为他们调用的都是</span>Component<span style="font-family: 宋体">的</span>setVisible<span style="font-family: 宋体">方法</span>(<span style="font-family: 宋体">所以给这些顶层组件添加</span>ComponentListener<span style="font-family: 宋体">是没有问题的，都会监听到</span>)</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">如果不想使用上述方法，还有另外一种方式就是添加</span>HierarchyListener<span style="font-family: 宋体">监听，因为当顶层组件</span>(JFrame,JDialog<span style="font-family: 宋体">等</span>)setVisible(true)<span style="font-family: 宋体">界面显示的时候，里面都会</span>fire<span style="font-family: 宋体">出</span>HierarchyEvent<span style="font-family: 宋体">，具体代码如下</span>(<span style="font-family: 宋体">详细代码请参考</span>Component<span style="font-family: 宋体">的</span>show()<span style="font-family: 宋体">方法</span>)</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createHierarchyEvents(HierarchyEvent.HIERARCHY_CHANGED,</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this, parent,</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HierarchyEvent.SHOWING_CHANGED,</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toolkit.enabledOnToolkit(AWTEvent.HIERARCHY_EVENT_MASK));</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: 宋体">而</span>createHierarchyEvents<span style="font-family: 宋体">方法会在每个组件上</span>fire<span style="font-family: 宋体">出</span>HierarchyEvent<span style="font-family: 宋体">，至于具体细节，有时间的可以</span>dubug<span style="font-family: 宋体">下，具体的解决方法如下</span></span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.addHierarchyListener(new HierarchyListener() {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void hierarchyChanged(HierarchyEvent e) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((e.getChangeFlags() &amp; HierarchyEvent.SHOWING_CHANGED) != 0) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (e.getComponent().isShowing()) {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(panel.getBounds());</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("panel:hshow");</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("panel:hhide");</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></span></span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 6px; margin: 0px; padding-top: 6px"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></span></span></p>
</span></span></span>测试代码如下<br />
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_18_1111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_1111_Open_Text.style.display='none'; Codehighlighter1_18_1111_Closed_Image.style.display='inline'; Codehighlighter1_18_1111_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_18_1111_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_1111_Closed_Text.style.display='none'; Codehighlighter1_18_1111_Open_Image.style.display='inline'; Codehighlighter1_18_1111_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span id="Codehighlighter1_18_1111_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" alt="" /></span><span id="Codehighlighter1_18_1111_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_60_77_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_77_Open_Text.style.display='none'; Codehighlighter1_60_77_Closed_Image.style.display='inline'; Codehighlighter1_60_77_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_60_77_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_77_Closed_Text.style.display='none'; Codehighlighter1_60_77_Open_Image.style.display='inline'; Codehighlighter1_60_77_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&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_60_77_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" alt="" /></span><span id="Codehighlighter1_60_77_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Test();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img id="Codehighlighter1_95_1109_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_1109_Open_Text.style.display='none'; Codehighlighter1_95_1109_Closed_Image.style.display='inline'; Codehighlighter1_95_1109_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_95_1109_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_1109_Closed_Text.style.display='none'; Codehighlighter1_95_1109_Open_Image.style.display='inline'; Codehighlighter1_95_1109_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Test()&nbsp;</span><span id="Codehighlighter1_95_1109_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" alt="" /></span><span id="Codehighlighter1_95_1109_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;JPanel&nbsp;panel&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 id="Codehighlighter1_186_327_Open_Image" onclick="this.style.display='none'; Codehighlighter1_186_327_Open_Text.style.display='none'; Codehighlighter1_186_327_Closed_Image.style.display='inline'; Codehighlighter1_186_327_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_186_327_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_186_327_Closed_Text.style.display='none'; Codehighlighter1_186_327_Open_Image.style.display='inline'; Codehighlighter1_186_327_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.addComponentListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ComponentAdapter()&nbsp;</span><span id="Codehighlighter1_186_327_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" alt="" /></span><span id="Codehighlighter1_186_327_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_236_323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_236_323_Open_Text.style.display='none'; Codehighlighter1_236_323_Closed_Image.style.display='inline'; Codehighlighter1_236_323_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_236_323_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_236_323_Closed_Text.style.display='none'; Codehighlighter1_236_323_Open_Image.style.display='inline'; Codehighlighter1_236_323_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&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;componentShown(ComponentEvent&nbsp;e)&nbsp;</span><span id="Codehighlighter1_236_323_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" alt="" /></span><span id="Codehighlighter1_236_323_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(panel.getBounds());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">panel:shown</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&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" alt="" />&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" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.setVisible(false);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.setVisible(true);</span><span style="color: #008000"><br />
<img id="Codehighlighter1_445_776_Open_Image" onclick="this.style.display='none'; Codehighlighter1_445_776_Open_Text.style.display='none'; Codehighlighter1_445_776_Closed_Image.style.display='inline'; Codehighlighter1_445_776_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_445_776_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_445_776_Closed_Text.style.display='none'; Codehighlighter1_445_776_Open_Image.style.display='inline'; Codehighlighter1_445_776_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;panel.addHierarchyListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HierarchyListener()&nbsp;</span><span id="Codehighlighter1_445_776_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_445_776_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_497_772_Open_Image" onclick="this.style.display='none'; Codehighlighter1_497_772_Open_Text.style.display='none'; Codehighlighter1_497_772_Closed_Image.style.display='inline'; Codehighlighter1_497_772_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_497_772_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_497_772_Closed_Text.style.display='none'; Codehighlighter1_497_772_Open_Image.style.display='inline'; Codehighlighter1_497_772_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&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;hierarchyChanged(HierarchyEvent&nbsp;e)&nbsp;</span><span id="Codehighlighter1_497_772_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" alt="" /></span><span id="Codehighlighter1_497_772_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_567_767_Open_Image" onclick="this.style.display='none'; Codehighlighter1_567_767_Open_Text.style.display='none'; Codehighlighter1_567_767_Closed_Image.style.display='inline'; Codehighlighter1_567_767_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_567_767_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_567_767_Closed_Text.style.display='none'; Codehighlighter1_567_767_Open_Image.style.display='inline'; Codehighlighter1_567_767_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((e.getChangeFlags()&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;HierarchyEvent.SHOWING_CHANGED)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_567_767_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" alt="" /></span><span id="Codehighlighter1_567_767_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_608_701_Open_Image" onclick="this.style.display='none'; Codehighlighter1_608_701_Open_Text.style.display='none'; Codehighlighter1_608_701_Closed_Image.style.display='inline'; Codehighlighter1_608_701_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_608_701_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_608_701_Closed_Text.style.display='none'; Codehighlighter1_608_701_Open_Image.style.display='inline'; Codehighlighter1_608_701_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.getComponent().isShowing())&nbsp;</span><span id="Codehighlighter1_608_701_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_608_701_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(panel.getBounds());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">panel:hshow</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_713_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_713_761_Open_Text.style.display='none'; Codehighlighter1_713_761_Closed_Image.style.display='inline'; Codehighlighter1_713_761_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_713_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_713_761_Closed_Text.style.display='none'; Codehighlighter1_713_761_Open_Image.style.display='inline'; Codehighlighter1_713_761_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_713_761_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" alt="" /></span><span id="Codehighlighter1_713_761_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">panel:hhide</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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" alt="" />&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" alt="" />&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" alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame&nbsp;frame&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JFrame();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
<img id="Codehighlighter1_865_963_Open_Image" onclick="this.style.display='none'; Codehighlighter1_865_963_Open_Text.style.display='none'; Codehighlighter1_865_963_Closed_Image.style.display='inline'; Codehighlighter1_865_963_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_865_963_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_865_963_Closed_Text.style.display='none'; Codehighlighter1_865_963_Open_Image.style.display='inline'; Codehighlighter1_865_963_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.addComponentListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ComponentAdapter()&nbsp;</span><span id="Codehighlighter1_865_963_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" alt="" /></span><span id="Codehighlighter1_865_963_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_915_959_Open_Image" onclick="this.style.display='none'; Codehighlighter1_915_959_Open_Text.style.display='none'; Codehighlighter1_915_959_Closed_Image.style.display='inline'; Codehighlighter1_915_959_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_915_959_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_915_959_Closed_Text.style.display='none'; Codehighlighter1_915_959_Open_Image.style.display='inline'; Codehighlighter1_915_959_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&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;componentShown(ComponentEvent&nbsp;e)&nbsp;</span><span id="Codehighlighter1_915_959_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" alt="" /></span><span id="Codehighlighter1_915_959_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">frame:shown</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&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" alt="" />&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" alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setContentPane(panel);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setSize(</span><span style="color: #000000">500</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">400</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.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" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div>
<br />
<img src ="http://www.blogjava.net/Swing/aggbug/312027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Swing/" target="_blank">zht</a> 2010-02-04 22:09 <a href="http://www.blogjava.net/Swing/archive/2010/02/04/312027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>