﻿<?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-Java桌面技术-随笔分类-GUI Design</title><link>http://www.blogjava.net/javagui/category/26799.html</link><description>Java Desktop Technology</description><language>zh-cn</language><lastBuildDate>Wed, 22 Aug 2012 04:37:27 GMT</lastBuildDate><pubDate>Wed, 22 Aug 2012 04:37:27 GMT</pubDate><ttl>60</ttl><item><title>通过xml配置文件定义及布局组件</title><link>http://www.blogjava.net/javagui/archive/2007/12/31/171788.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Sun, 30 Dec 2007 16:49:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/12/31/171788.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/171788.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/12/31/171788.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/171788.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/171788.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 无论Matisse发展得如何强大，但是其本质只是用来生成Java代码而已，当你修改这代码后，再逆向恢复成UI设计器时Matisse却出于自己的一套安全考虑不允许你这样做，所以最终不得迫使开发人员放弃拖曳方式设计UI，而统统采用面向代码的方式。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/12/31/171788.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/171788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-12-31 00:49 <a href="http://www.blogjava.net/javagui/archive/2007/12/31/171788.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于有时间写Blog了</title><link>http://www.blogjava.net/javagui/archive/2007/12/25/170373.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Tue, 25 Dec 2007 11:13:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/12/25/170373.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/170373.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/12/25/170373.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/170373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/170373.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 沉默了近一个月，终于有时间写Blog了。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/12/25/170373.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/170373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-12-25 19:13 <a href="http://www.blogjava.net/javagui/archive/2007/12/25/170373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义布局管理器-CenterLayout</title><link>http://www.blogjava.net/javagui/archive/2007/11/29/164038.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Thu, 29 Nov 2007 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/29/164038.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/164038.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/29/164038.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/164038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/164038.html</trackback:ping><description><![CDATA[<p>上文<a title="自定义布局管理器-FormLayout" href="http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html">自定义布局管理器-FormLayout</a>介绍了FormLayout的参考实现，利用FormLayout，通过指定left、top、</p>
<p>right（可选）、bottom（可选）布局约束可以对组件进行精确定位。然而有些组件在业务上是有固定尺寸的，例如<a title="自定义组件之Button" href="http://www.blogjava.net/javagui/archive/2007/11/11/javagui.html">自定义组件之Button</a>介绍的一样，通过给按钮指定4种状态时的图片，那么组件的最佳尺寸就是图片的尺寸，因此组件的PreferredSize就可以确定，所以此时只需要组件<span style="color: red;">中心</span>的确定坐标就可以了，实际组件的Location只和其PreferredSize有关。如下图所示：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/javagui/swing_demo/centerlayout.jpg" border="0" height="232" width="363" /><br />
这就是CenterLayout的思想。</p>
<p>修改FormData，只需要添加两个变量即可。<br />
<span style="color: #3366ff; ">public final class FormData {</span><br /><span style="color: #3366ff; ">&nbsp; &nbsp; public FormAttachment left;</span></p>
<p><span style="color: #3366ff; ">&nbsp; &nbsp; public FormAttachment right;</span></p>
<p><span style="color: #3366ff; ">&nbsp; &nbsp; public FormAttachment top;</span></p>
<p><span style="color: #3366ff; ">&nbsp; &nbsp; public FormAttachment bottom;</span></p>
<p><span style="color: #ff0000; ">&nbsp; &nbsp;&nbsp;</span><span style="color: #ff0000; ">public FormAttachment centerX;</span></p>
<p><span style="color: #ff0000; ">&nbsp; &nbsp; public FormAttachment centerY;</span><span style="color: #3366ff; "><br />
</span><span style="color: #3366ff; ">}</span><br />
CenterLayout与FormLayout不同只在于addLayoutComponent、layoutContainer这两个</p>
<p>方法实现，其他接口方法均相同，所以下面只介绍这两个方法实现，其他接口方法请</p>
<p>参阅上文<a title="自定义布局管理器-FormLayout" href="http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html">自定义布局管理器-FormLayout</a><br />
在addLayoutComponent方法的开头，同样是对布局约束参数constraints合法性进行检查，这点与FormLayout大致相同。</p>
if (constraints == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("constraints can't be null");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (!(constraints instanceof FormData)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("constraints must be a " + FormData.class.getName() + " instance");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized (comp.getTreeLock()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormData formData = (FormData) constraints;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (formData.centerX == null || formData.centerY == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("centerX FormAttachment and centerY FormAttachment can't be null");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (comp.getPreferredSize() == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException("component must have preferred size before be add into parent with CenterLayout");<br />
&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;componentConstraints.put(comp, (FormData) constraints);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<p>
对于CenterLayout来说，FormData对象的centerX、centerY必须给出，因为它代表，点的坐标，除此之外组件必须有PreferredSize属性来指定组件大小。</p>
<p>layoutContainer方法实现也大致相同<br />
public synchronized void layoutContainer(Container target) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized (target.getTreeLock()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int w = target.getWidth();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int h = target.getHeight();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Component[] components = target.getComponents();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Component comp : components) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormData formData =&nbsp;componentConstraints.get(comp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (formData != null) {<br />
&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
上面这步与FormLayout一样。关键在if语句块内，代码如下：<br />
&nbsp;
FormAttachment centerX = formData.centerX;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormAttachment centerY = formData.centerY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int width = component.getPreferredSize().width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int height = component.getPreferredSize().height;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int x = (int) (centerX.percentage * w) + centerX.offset - width / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int y = (int) (centerY.percentage * h) + centerY.offset - height / 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comp.setBounds(x, y, width, height);<br />
获得centerX、centerY以及最佳尺寸，如上图所示，不难得出x、y的计算方法。<br />
<br />
至此，自定义布局管理器就介绍到这里，这两个布局类可以解决很多<span style="color: red;">静态布局</span>需求，所谓静态布局是指容器内有什么组件是固定的。如果遇到动态界面，例如组件的内容依照用户级别、插件扩展点等因素决定，也并不是难事，因为了解了布局管理器运行机制以后可很容易地定义适合你需求的布局类。对于静态布局来说，你可能厌倦了hard coding来布局，你希望这一切由xml这样的配置搞定，好，下一部分则开始&#8220;压轴戏&#8221;&#8212;&#8212;用配置文件解决布局。</p><img src ="http://www.blogjava.net/javagui/aggbug/164038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-29 16:53 <a href="http://www.blogjava.net/javagui/archive/2007/11/29/164038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义布局管理器-FormLayout</title><link>http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Sat, 24 Nov 2007 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/162877.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/162877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/162877.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在java.awt包与javax.swing包下有许多现成的布局类，比如BorderLayout、FlowLayout，还有较为复杂的、用于精确定位的布局类GridBagLayout、SpringLayout等。起初我刚刚从事gooey时（06年中），企图依靠JDK自带的布局类进行布局，但是实际不可能或者说很难做到。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/162877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-24 18:26 <a href="http://www.blogjava.net/javagui/archive/2007/11/24/FormLayout.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>swing专业外观</title><link>http://www.blogjava.net/javagui/archive/2007/11/07/158849.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Wed, 07 Nov 2007 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/07/158849.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/158849.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/07/158849.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/158849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/158849.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前3篇文章使用SWT组件实现了专业外观窗口，现在给出一个swing实现版本。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/11/07/158849.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/158849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-07 16:17 <a href="http://www.blogjava.net/javagui/archive/2007/11/07/158849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打造专业外观-三</title><link>http://www.blogjava.net/javagui/archive/2007/11/07/158693.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Tue, 06 Nov 2007 16:49:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/07/158693.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/158693.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/07/158693.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/158693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/158693.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在《打造专业外观-二》中，留下了3个未实现的功能：窗口标题和图标，边缘圆角，功能按钮。在本篇中将实现这些功能来完结打造专业外观-窗口部分的讲解。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/11/07/158693.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/158693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-07 00:49 <a href="http://www.blogjava.net/javagui/archive/2007/11/07/158693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打造专业外观-二</title><link>http://www.blogjava.net/javagui/archive/2007/11/04/158107.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Sun, 04 Nov 2007 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/04/158107.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/158107.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/04/158107.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/158107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/158107.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在上一篇《打造专业外观-九宫图》，介绍了九宫格的概念并留下了一个演示程序。那个程序只是一个渲染过的窗口，许多必要的功能尚未实现，比如拖拽移动、改变大小、标题栏双击等。好现在就来一一实现。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/11/04/158107.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/158107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-04 20:12 <a href="http://www.blogjava.net/javagui/archive/2007/11/04/158107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打造专业外观-九宫图</title><link>http://www.blogjava.net/javagui/archive/2007/11/03/157948.html</link><dc:creator>sun_java_studio@yahoo.com.cn(电玩)</dc:creator><author>sun_java_studio@yahoo.com.cn(电玩)</author><pubDate>Sat, 03 Nov 2007 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/javagui/archive/2007/11/03/157948.html</guid><wfw:comment>http://www.blogjava.net/javagui/comments/157948.html</wfw:comment><comments>http://www.blogjava.net/javagui/archive/2007/11/03/157948.html#Feedback</comments><slash:comments>43</slash:comments><wfw:commentRss>http://www.blogjava.net/javagui/comments/commentRss/157948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagui/services/trackbacks/157948.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 起初依赖JButton、JScroll等基础组件，BorderLayout、FlowLayout等现成的布局管理器企图能实现类似MSN的外观效果，但是实际看来是完全不可能的，所以我当时就下了这样的结论，哪怕现在我依然认为是正确的：“抛弃所有的外观设计工具和一切现有的桌面组件及布局管理器，一切的一切必须自定义实现，设计工具最多能替你完成一半”。&nbsp;&nbsp;<a href='http://www.blogjava.net/javagui/archive/2007/11/03/157948.html'>阅读全文</a><img src ="http://www.blogjava.net/javagui/aggbug/157948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagui/" target="_blank">sun_java_studio@yahoo.com.cn(电玩)</a> 2007-11-03 17:56 <a href="http://www.blogjava.net/javagui/archive/2007/11/03/157948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>