<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>权记 &#187; Swing</title>
	<atom:link href="http://www.quanlei.com/tag/swing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.quanlei.com</link>
	<description>一个关于我们生活点滴的网站，一个记录我们酸甜苦辣的日志。</description>
	<lastBuildDate>Sun, 06 Jun 2010 01:10:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Drawing in code</title>
		<link>http://www.quanlei.com/2010/02/drawing-in-code/</link>
		<comments>http://www.quanlei.com/2010/02/drawing-in-code/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 09:34:44 +0000</pubDate>
		<dc:creator>小权</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.quanlei.com/?p=1248</guid>
		<description><![CDATA[之前介绍了一个Swing做的原子钟的效果 “Swing Nixieclock（原子钟）效果”，作者放出了制作 Swing原子钟 制作的主要元素 &#8211; 原子钟的制造过程。 想看制作过程的移步这里： Part One 先通过绘图工具，绘出原型，绘制过程以及绘制时的参数，要在Swing中使用。 Part Two 将原型绘制过程中的一些数据，以Java Code 的形式在Swing中体现出来，步骤和通过绘图工具绘制时差不多，一步步来。]]></description>
			<content:encoded><![CDATA[<p>之前介绍了一个Swing做的原子钟的效果 “<a href="http://www.quanlei.com/2010/01/swing-nixieclock/">Swing Nixieclock（原子钟）效果</a>”，作者放出了制作 Swing原子钟 制作的主要元素 &#8211; 原子钟的制造过程。<br />
<a href="http://www.quanlei.com/wp-content/uploads/2010/02/Screenshot.png"><img class="aligncenter size-full wp-image-1250" title="NixieClock" src="http://www.quanlei.com/wp-content/uploads/2010/02/Screenshot.png" alt="" width="268" height="272" /></a><br />
想看制作过程的移步这里：</p>
<p><a href="http://www.jug-muenster.de/drawing-in-code-part-1-379/">Part One</a></p>
<blockquote><p>先通过绘图工具，绘出原型，绘制过程以及绘制时的参数，要在Swing中使用。</p></blockquote>
<p><a href="http://www.jug-muenster.de/drawing-in-code-part-2-2-384/">Part Two</a></p>
<blockquote><p>将原型绘制过程中的一些数据，以Java Code 的形式在Swing中体现出来，步骤和通过绘图工具绘制时差不多，一步步来。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.quanlei.com/2010/02/drawing-in-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Swing Nixieclock（原子钟）效果</title>
		<link>http://www.quanlei.com/2010/01/swing-nixieclock/</link>
		<comments>http://www.quanlei.com/2010/01/swing-nixieclock/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 03:43:43 +0000</pubDate>
		<dc:creator>小权</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://www.quanlei.com/?p=1221</guid>
		<description><![CDATA[在JavaEye上看的这个，转发一下，原文：http://www.javaeye.com/news/13151 Gerrit 受到了这些设计的启发，尝试着使用Swing创造出了NixieClock（原子钟）效果。 *首先，在Fireworks中创建了一个原型 *第二步是建立一个JavaBean并将其转成Swing，这个步骤要花费很多时间 *第三步是建立一个包含时钟逻辑的JFrame和6个nixie number的组件 结果如下： 下载NixieClock：http://www.jug-muenster.de/wp-content/uploads/2010/01/NixieClock.zip]]></description>
			<content:encoded><![CDATA[<p>在JavaEye上看的这个，转发一下，原文：http://www.javaeye.com/news/13151</p>
<p><a href="http://www.jug-muenster.de/swing-nixieclock-321/">Gerrit </a>受到了<a href="http://www.electricstuff.co.uk/nixiegallery.html">这些设计</a>的启发，尝试着使用Swing创造出了NixieClock（原子钟）效果。</p>
<p>*首先，在Fireworks中创建了一个原型</p>
<p><img src="http://www.jug-muenster.de/wp-content/uploads/2010/01/ishot-2.png" alt="" /></p>
<p>*第二步是建立一个JavaBean并将其转成Swing，这个步骤要花费很多时间</p>
<p>*第三步是建立一个包含时钟逻辑的JFrame和6个nixie number的组件</p>
<p>结果如下：<br />
<img src="http://www.jug-muenster.de/wp-content/uploads/2010/01/ishot-1.png" alt="" /></p>
<p>下载NixieClock：<a href="http://www.jug-muenster.de/wp-content/uploads/2010/01/NixieClock.zip">http://www.jug-muenster.de/wp-content/uploads/2010/01/NixieClock.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.quanlei.com/2010/01/swing-nixieclock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[09/49周主题] – Swing Tips</title>
		<link>http://www.quanlei.com/2009/12/0949-week-subject-swing/</link>
		<comments>http://www.quanlei.com/2009/12/0949-week-subject-swing/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 12:35:17 +0000</pubDate>
		<dc:creator>小权</dc:creator>
				<category><![CDATA[周主题]]></category>
		<category><![CDATA[编程相关]]></category>
		<category><![CDATA[AWT]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[客户]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[界面]]></category>
		<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.quanlei.com/?p=974</guid>
		<description><![CDATA[选择这个主题，是因为上周公司刚好做了一个有关“Beginning Java AWT and Swing” 的培训，借此机会正好总结一下这方面的使用技巧。对于Swing界面方面的研究，我仅仅是应用而已，公司里有几位同事在这方面的研究比较深，这块的应用和使用技巧分两部分， 一部分是Swing 使用本身的，另一部分是Design工具NetBeans的，如果是刚入门建议从这里看起：Creating a GUI With JFC/Swing。 本期主题：Swing Tips 一、性能问题 随着Java 6对于Swing性能的改进，Swing的运行速度已经开始得到了大大的提高，看看NetBeans就知道了，NetBeans就是Swing开发的，如果你跑Swing很慢，很耗资源，那么应该从自己的程序上找找问题，推荐使用NetBeans自带的Profile查找原因，教程在这里 &#8211; Profile Introduce 。 二、LookAndFeel 用Swing做企业应用时，LookAndFeel的选择和使用是决定这个项目能否被客户接受的一个很大因素，即要好看，又要考虑跨平台的兼容性，必要时自己还得设计部分LookAndFeel， 可以看看这里提供的一些开源LookAndFeel：http://www.open-open.com/61.htm 和http://www.javootoo.com/。 切换LookAndFeel： UIManager.setLookAndFeel(LookAndFeelName); SwingUtilities.updateComponentTreeUI(frame); frame.pack(); 三、合理的控制初始化组件和组件初始化的顺序可以很大的提高性能 举个例子：之前我们项目中有一个地方，当打开程序时，会初始化几十个甚至成百个JPanel，这显然成为程序启动时慢的一个因素，也导致了用户体验的降低，这些JPanel完全可以在程序启动后再根据用户的需要去初始化，因为用户打开程序时这些Panel不是必须看到的。 四、要有统一的UI规范 比如Button的高度，进度条的高宽等，也可以通过UIManager给系统组件设置统一属性，比如统一设定Button的间距和字体： UIManager.put(&#34;Button.margin&#34;, new Insets(2, 5, 2, 5)); UIManager.put(&#34;Button.font&#34;, new Font(&#34;宋体&#34;, Font.PLAIN, 13)); 五、多线程的使用 用Swing做的都是界面的东西，如果界面假死或者用户等待事件太长，那么用户体验必然是不好的，这里就需要用到多线程的使用了，当界面处理一个请求时，不能让界面假死了，需要后台另一个线程去做处理，然后将结果返回到Swing线程，这块可以看看SwingWorker的介绍。 六、布局管理器 布局管理器的使用在Swing里面是比较重要的，它直接决定了你界面的显示效果，也是比较难用的一块，不好举例子，建议多了解每个布局管理器的使用场景。 七、JTable &#38; JTree 在Swing组件的使用中除了布局管理器，估计就数JTable和JTree的使用稍微有点麻烦了，下面我就分享一些实际项目中JTable的一些实例，关于JTree，可以点这里：JTree 经验 总结 。 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #800000;"><span style="font-size: xx-large;">选</span></span>择这个主题，是因为上周公司刚好做了一个有关“Beginning Java AWT and Swing” 的培训，借此机会正好总结一下这方面的使用技巧。对于Swing界面方面的研究，我仅仅是应用而已，公司里有几位同事在这方面的研究比较深，这块的应用和使用技巧分两部分， 一部分是Swing 使用本身的，另一部分是Design工具NetBeans的，如果是刚入门建议从这里看起：<a href="http://java.sun.com/docs/books/tutorial/uiswing/index.html" target="_blank">Creating a GUI With JFC/Swing</a>。</p>
<h2>本期主题：Swing Tips</h2>
<h3>一、性能问题</h3>
<blockquote><p>随着Java 6对于Swing性能的改进，Swing的运行速度已经开始得到了大大的提高，看看NetBeans就知道了，NetBeans就是Swing开发的，如果你跑Swing很慢，很耗资源，那么应该从自己的程序上找找问题，推荐使用NetBeans自带的Profile查找原因，教程在这里 &#8211; <a href="http://zh-cn.netbeans.org/kb/60/java/profiler-intro.html" target="_blank">Profile Introduce</a> 。</p></blockquote>
<h3>二、LookAndFeel</h3>
<blockquote><p>用Swing做企业应用时，LookAndFeel的选择和使用是决定这个项目能否被客户接受的一个很大因素，即要好看，又要考虑跨平台的兼容性，必要时自己还得设计部分LookAndFeel， 可以看看这里提供的一些开源LookAndFeel：http://www.open-open.com/61.htm 和http://www.javootoo.com/。<br />
切换LookAndFeel：</p>
<pre class="brush: java;">
UIManager.setLookAndFeel(LookAndFeelName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
</pre>
</blockquote>
<h3>三、合理的控制初始化组件和组件初始化的顺序可以很大的提高性能</h3>
<blockquote><p>举个例子：之前我们项目中有一个地方，当打开程序时，会初始化几十个甚至成百个JPanel，这显然成为程序启动时慢的一个因素，也导致了用户体验的降低，这些JPanel完全可以在程序启动后再根据用户的需要去初始化，因为用户打开程序时这些Panel不是必须看到的。</p></blockquote>
<h3>四、要有统一的UI规范</h3>
<blockquote><p>比如Button的高度，进度条的高宽等，也可以通过UIManager给系统组件设置统一属性，比如统一设定Button的间距和字体：</p>
<pre class="brush: java;">
UIManager.put(&quot;Button.margin&quot;, new Insets(2, 5, 2, 5));
UIManager.put(&quot;Button.font&quot;, new Font(&quot;宋体&quot;, Font.PLAIN, 13));
</pre>
</blockquote>
<h3>五、多线程的使用</h3>
<blockquote><p>用Swing做的都是界面的东西，如果界面假死或者用户等待事件太长，那么用户体验必然是不好的，这里就需要用到多线程的使用了，当界面处理一个请求时，不能让界面假死了，需要后台另一个线程去做处理，然后将结果返回到Swing线程，这块可以看看<a href="http://java.sun.com/javase/6/docs/api/javax/swing/SwingWorker.html" target="_blank">SwingWorker</a>的介绍。</p></blockquote>
<h3>六、布局管理器</h3>
<blockquote><p>布局管理器的使用在Swing里面是比较重要的，它直接决定了你界面的显示效果，也是比较难用的一块，不好举例子，建议多了解每个布局管理器的使用场景。</p></blockquote>
<h3>七、JTable &amp; JTree</h3>
<blockquote><p>在Swing组件的使用中除了布局管理器，估计就数JTable和JTree的使用稍微有点麻烦了，下面我就分享一些实际项目中JTable的一些实例，关于JTree，可以点这里：<a href="http://www.google.cn/search?hl=zh-CN&amp;newwindow=1&amp;q=JTree+%E7%BB%8F%E9%AA%8C+%E6%80%BB%E7%BB%93" target="_blank">JTree 经验 总结</a> 。</p>
<h4>JTable相关</h4>
<h5>1、自定义表头排序</h5>
<pre class="brush: java;">
TableRowSorter rs = (TableRowSorter) table.getRowSorter();
Comparator&lt;Integer&gt; intComparator = new Comparator&lt;Integer&gt;() {

            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
rs.setComparator(3, intComparator);
 </pre>
<h5>2、自定义Table Renderer</h5>
<pre class="brush: java;">
public class CommonTableCellRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean cellHasFocus, int row, int column) {
            JComponent comp = (JComponent) super.getTableCellRendererComponent(table, value,
isSelected, cellHasFocus, row, column);
            //表格的奇数偶数行交叉颜色显示
            if (!isSelected) {
                if (row % 2 == 0) {
                    comp.setBackground(UIConsts.HIGHLIGHTER_COLOR);
                } else {
                    comp.setBackground(Color.white);
                }
            }

            //table column里面显示图标和对齐方式
            switch (column) {
                case PaperTableModel.STATUS_COLUMN:
                    switch ((EntityStatus) value) {
                        case VALID:
                            comp.setIcon(ENABLED_ICON);
                            setHorizontalAlignment(JLabel.LEADING);
                            break;
                        case DISABLED:
                            comp.setIcon(DISABLED_ICON);
                            setHorizontalAlignment(JLabel.CENTER);
                            break;
                    }
                    break;
                default:
                    comp.setIcon(null);
                    break;
            }

            return comp;
        }
    }
 </pre>
<h5>3、自定义Table列宽</h5>
<pre class="brush: java;">
TableColumnModel colModel = table.getColumnModel();
colModel.getColumn(0).setPreferredWidth(70);
colModel.getColumn(1).setPreferredWidth(55);
colModel.getColumn(2).setPreferredWidth(120);
</pre>
<h5>4、禁止Table列拖动</h5>
<pre class="brush: java;"> table.getTableHeader().setReorderingAllowed(false);  </pre>
<h5>5、单选表格设置</h5>
<pre class="brush: java;"> table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);   </pre>
<h5>6、设置表头默认支持排序</h5>
<pre class="brush: java;"> table.setAutoCreateRowSorter(true);  </pre>
<h5>7、设置列不可随容器组件大小变化自动调整宽度</h5>
<pre class="brush: java;"> table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  </pre>
<h5>8、固定Table上的某些列不滚动</h5>
<p>这个需求是这样的，比如Table上左边有部分数据，是后面数据所共有的属性，那么当后面数据很多时，显示不下会出现滚动条，但是滚动时又不想让左侧的共有属性动，只滚动右侧的数据部分。<br />
实现原理是:scrollPane里面放置一个表格，然后在scrollPane的左上角放置以共有属性的部分为Model的表格，剩下的右侧就是剩余的纯数据表格。<br />
最终效果就是表格左侧的列锁定了，右侧数据出现滚动条时，可以滚动，但左侧不动。<br />
核心代码：比如有HeaderTable和ReportTable， 其中ReportTable是放置在一个ScrollPanel里面，Model是所有数据的Model，将左侧的数据和右侧的数据分开</p>
<pre class="brush: java;">
//找到主表所在的scrollPane
JScrollPane scrollPane = (JScrollPane) SwingUtilities.
   getAncestorOfClass(JScrollPane.class,
    reportTable.getTable());

//中间处理headerTable的数据和reportTable剩余的数据

//将新表HeaderTable放在scrollPane的左上角
scrollPane.setRowHeaderView(headerTable.getTable());
scrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,
                    headerTable.getTable().getTableHeader());
</pre>
<h5>9、Table上的直接编辑功能</h5>
<p>两点：<br />
1、重写 public boolean isCellEditable(int row, int columnIndex) 方法，定义可编辑的行列。<br />
2、重写 public void setValueAt(Object obj, int rowIndex, int columnIndex) 方法，拿到原来的对象，设置新的对象值。</p>
<h5>10、Table的Excel导出功能</h5>
<p>表格上的Excel导出功能还是比较实用的功能，企业应用一般都会用到，这里提供相关代码</p>
<pre class="brush: java;">
try {
   WritableCellFormat titleFormat = new WritableCellFormat(
   new WritableFont(WritableFont.createFont(&quot;黑体&quot;), 16,
   WritableFont.NO_BOLD));
   titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   titleFormat.setAlignment(Alignment.CENTRE); // 水平对齐
   titleFormat.setWrap(true); // 是否换行

   WritableCellFormat headerFormat = new WritableCellFormat();
   headerFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
   headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   headerFormat.setAlignment(Alignment.CENTRE); // 水平对齐
   headerFormat.setWrap(true); // 是否换行

   WritableCellFormat countFormat = new WritableCellFormat(
   new NumberFormat(&quot;0.000&quot;));
   countFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
   countFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   countFormat.setAlignment(Alignment.RIGHT); // 水平对齐
   countFormat.setWrap(true); // 是否换行

   WritableCellFormat moneyFormat = new WritableCellFormat(
   new NumberFormat(&quot;0.00&quot;));
   moneyFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
   moneyFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   moneyFormat.setAlignment(Alignment.RIGHT); // 水平对齐
   moneyFormat.setWrap(true); // 是否换行

   WritableCellFormat intFormat = new WritableCellFormat(
   new NumberFormat(&quot;0&quot;));
   intFormat.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
   intFormat.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   intFormat.setAlignment(Alignment.RIGHT); // 水平对齐
   intFormat.setWrap(true); // 是否换行

   WritableWorkbook book = Workbook.createWorkbook(exportFile);
   WritableSheet sheet = book.createSheet(&quot;综合统计报表&quot;, 0);
   int titleRow = 0;
   int headerRow = 3;
   int dataRow = 5;
   sheet.mergeCells(0, titleRow, model.getColumnCount() - 1,
   titleRow);
   Label titleLab = new Label(0, titleRow, tableTitleTxfd.getText(), titleFormat);
   sheet.addCell(titleLab);

   //生成表头
   for (int j = 0; j &lt; model.getColumnCount(); j++) {
       sheet.mergeCells(j, headerRow, j, headerRow + 1);
       Label lab = new Label(j, headerRow, model.getColumnName(
      j), headerFormat);
       sheet.addCell(lab);
   }

   for (int row = 0; row &lt; model.getRowCount(); row++) {
       for (int col = 0; col &lt; model.getColumnCount(); col++) {
          Object obj = model.getValueAt(row, col);
          if (obj instanceof String) {
             Label lab = new Label(col, dataRow + row,
               (String) obj, headerFormat);
            sheet.addCell(lab);
          } else if (obj instanceof Integer) {
         Number labelN = new Number(col, dataRow
         + row, (Integer) obj, intFormat);
         sheet.addCell(labelN);
         } else {
         Label lab =
         new Label(col, dataRow + row, &quot;&quot;,
         headerFormat);
         sheet.addCell(lab);
         }
      }
   }

   //生成表尾
   int footerRow = dataRow + model.getRowCount() + 1;
   int step =
   (int) (((double) (model.getColumnCount() - 2) / 3)
   + 1);
   Label footerLab = new Label(0, footerRow, &quot;部门负责人：&quot;);
   sheet.addCell(footerLab);
   footerLab = new Label(step, footerRow, &quot;制表：&quot; + creatorTxfd.getText());
   sheet.addCell(footerLab);
   footerLab = new Label(model.getColumnCount() - 2, footerRow,
   NazcaFormater.getSimpleDateString(new Date()));
   sheet.addCell(footerLab);

   sheet.setColumnView(0, 16);
   sheet.setRowView(titleRow, 600);

   book.write();
   book.close();
   //导出成功
   } catch (Throwable ex) {
   //导出报表失败
   ex.printStackTrace();
}
</pre>
<h5>11、Table的打印功能</h5>
<p>打印这块，之前已经提过，可以参考之前的文章 <a href="http://www.quanlei.com/2009/11/jtable_print/">JTable Print</a></p>
<h5>12、在Table上选择多行</h5>
<pre class="brush: java;">
int rowcounts=table.getSelectedRows().length;
if(rowcounts&gt;1)
  int[] rows=table.getSelectedRows();
    for(int i=0;i&lt;rows.length;i++){
    String value=(String) tableModel.getValueAt(i, 1);
  }
}
</pre>
</blockquote>
<h2>NetBeans 6+ Tips</h2>
<p>这里说NetBeans，主要是因为目前Swing开发方面，还没有哪个IDE能胜过NetBeans。</p>
<blockquote><p>一、NetBeans的配置</p>
<blockquote><p>1、配置为英文，大部分时间我们下载的都是中文的版本，可以通过在/$NetBeans_HOME/etc/netbeans.conf中添加 &#8211;locale en_US， 让启动时显示为英文，这个之前也有文章介绍：<a href="http://www.quanlei.com/tag/netbeans-%E8%8B%B1%E6%96%87%E7%95%8C%E9%9D%A2/" target="_blank">Netbeans 英文界面</a> 和 <a href="http://www.quanlei.com/2009/07/%E8%A1%A5%E5%8F%91%EF%BC%9A%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84netbeans%E4%B8%AD%E8%8B%B1%E6%96%87%E5%88%87%E6%8D%A2/" target="_blank">最简单的Netbeans中英文切换</a><br />
2、优化配置可以看之前介绍的这篇文章，就不重复了：<a href="http://www.quanlei.com/2008/12/netbeans-65-%E4%BC%98%E5%8C%96%E5%BB%BA%E8%AE%AE/" target="_blank">Netbeans 6.5 优化建议 </a></p></blockquote>
<p>二、经验分享</p>
<blockquote><p>1、Swing的Debug虽然被很多人说不好用，但是在用NetBeans时，多用Debug可以提高效率，因为Debug模式下的修改，大部分只要点击应用，就可以不用重启项目而看到效果。<br />
2、很好用的快捷键和快速补齐(限Windows + Linux下，如果在Mac下改成 ⌘ 试试)，如：</p>
<blockquote>
<pre>快捷键：
Ctrl+R          Rename
Alt+Enter       Fix Error(Eclipse Ctrl+1)
Alt+Shift+F    Quick Format
Alt+Shift+I     Fix Import
F9                Build File
F6                Run Main Project
Shift+F6        Run File
Ctrl+|           Insert Code

快速补齐（英文输入状态下，输入完后按Tab键，也可以自己配置为其他键，在Options - Editor -
Code Templates下）：
psvm            public static void main
sout             System.out.println
im               implements
Psfs             public static final String
psfi             private static final String
fore            for($ : $){}
fori             for(int i = 0; i &lt; arr.length; i++){}
forl             for(int i = 0; i &lt; list.size(); i++){}</pre>
</blockquote>
</blockquote>
<p>三、插件分享<br />
我们都知道NetBeans上的插件很多，可以说NetBeans正是因为这些插件才强大起来，支持的功能也更多了。分享的这几个插件是平时工作时，可以显著提高效率的，不好的不推荐，你如果有好的也别忘记分享下。</p>
<blockquote><p>1、Path Tools  &#8211; 可以直接查找到类或者文件夹所在的磁盘位置，基本是我每次装完NetBeans的后第一个装的插件。<br />
2、SQE(Software Quality Environment) &#8211; 是最近同事刚刚推荐的一个插件，看名字就知道了，是一个类似Firebug的插件，可以发现程序中存在的一些显著的错误，很不错。<br />
3、<a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=9000" target="_blank">UUID Generator </a>- 同事写的一个快速生成UUID的插件。<br />
4、SwingX 插件 &#8211; 用来添加一些SwingX组件的。<br />
5、iReport &#8211; 打印报表用的插件，结合JasperReport使用。</p></blockquote>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.quanlei.com/2009/12/0949-week-subject-swing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Swing Table上的常用技巧</title>
		<link>http://www.quanlei.com/2009/07/swing-table%e4%b8%8a%e7%9a%84%e5%b8%b8%e7%94%a8%e6%8a%80%e5%b7%a7/</link>
		<comments>http://www.quanlei.com/2009/07/swing-table%e4%b8%8a%e7%9a%84%e5%b8%b8%e7%94%a8%e6%8a%80%e5%b7%a7/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 08:10:16 +0000</pubDate>
		<dc:creator>小权</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://www.quanlei.com/?p=570</guid>
		<description><![CDATA[WordPress 上的代码高亮不是很好看，发这里了。 http://disney2002.javaeye.com/blog/425638]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">WordPress 上的代码高亮不是很好看，发这里了。</span></p>
<p><a href="http://disney2002.javaeye.com/blog/425638"><span style="color: #000000;">http://disney2002.javaeye.com/blog/425638</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.quanlei.com/2009/07/swing-table%e4%b8%8a%e7%9a%84%e5%b8%b8%e7%94%a8%e6%8a%80%e5%b7%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
