﻿<?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-hengheng123456789-文章分类-SWT</title><link>http://www.blogjava.net/hengheng123456789/category/16704.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Aug 2007 03:35:13 GMT</lastBuildDate><pubDate>Sun, 12 Aug 2007 03:35:13 GMT</pubDate><ttl>60</ttl><item><title>SWT 控件简介</title><link>http://www.blogjava.net/hengheng123456789/articles/79899.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Wed, 08 Nov 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79899.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79899.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79899.html</trackback:ping><description><![CDATA[可以参考这篇文章：<br /><a href="http://www.eclipse.org/swt/widgets/">http://www.eclipse.org/swt/widgets/</a><br /><img src ="http://www.blogjava.net/hengheng123456789/aggbug/79899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-08 16:55 <a href="http://www.blogjava.net/hengheng123456789/articles/79899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT Layouts</title><link>http://www.blogjava.net/hengheng123456789/articles/79894.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Wed, 08 Nov 2006 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79894.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79894.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79894.html</trackback:ping><description><![CDATA[
		<p>可以参看此文章，写得相当详细：）<br /><a href="http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm">http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm</a><br /></p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-08 16:51 <a href="http://www.blogjava.net/hengheng123456789/articles/79894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT Drag and Drop </title><link>http://www.blogjava.net/hengheng123456789/articles/79661.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79661.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79661.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79661.html</trackback:ping><description><![CDATA[
		<p>1、拖拽Label的文字。<br /><br /> public static void main (String [] args) {<br />  <br />  Display display = new Display ();<br />  final Shell shell = new Shell (display);<br />  shell.setLayout(new FillLayout());<br />  final Label label1 = new Label (shell, SWT.BORDER);<br />  label1.setText ("TEXT");<br />  final Label label2 = new Label (shell, SWT.BORDER);<br />  setDragDrop (label1);<br />  setDragDrop (label2);<br />  shell.setSize (200, 200);<br />  shell.open ();<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<br /> <br /> public static void setDragDrop (final Label label) {<br />  <br />  Transfer[] types = new Transfer[] {TextTransfer.getInstance()};<br />  int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;<br />  <br />  final DragSource source = new DragSource (label, operations);<br />  source.setTransfer(types);<br />  source.addDragListener (new DragSourceListener () {<br />   public void dragStart(DragSourceEvent event) {<br />    event.doit = (label.getText ().length () != 0);<br />   }<br />   public void dragSetData (DragSourceEvent event) {<br />    event.data = label.getText ();<br />   }<br />   public void dragFinished(DragSourceEvent event) {<br />    if (event.detail == DND.DROP_MOVE)<br />     label.setText ("");<br />   }<br />  });</p>
		<p>  DropTarget target = new DropTarget(label, operations);<br />  target.setTransfer(types);<br />  target.addDropListener (new DropTargetAdapter() {<br />   public void drop(DropTargetEvent event) {<br />    if (event.data == null) {<br />     event.detail = DND.DROP_NONE;<br />     return;<br />    }<br />    label.setText ((String) event.data);<br />   }<br />  });<br /> }<br /><br />2、随意拖拽Tree子节点。<br /><br /> public static void main (String [] args) {<br />  <br />  final Display display = new Display ();<br />  final Shell shell = new Shell (display);<br />  shell.setLayout(new FillLayout());<br />  //建立用于拖拽的树<br />  final Tree tree = new Tree(shell, SWT.BORDER);<br />  for (int i = 0; i &lt; 3; i++) {<br />   TreeItem item = new TreeItem(tree, SWT.NONE);<br />   item.setText("item "+i);<br />   for (int j = 0; j &lt; 3; j++) {<br />    TreeItem subItem = new TreeItem(item, SWT.NONE);<br />    subItem.setText("item "+i+" "+j);<br />    for (int k = 0; k &lt; 3; k++) {<br />     TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);<br />     subsubItem.setText("item "+i+" "+j+" "+k);<br />    }<br />   }<br />  }<br />  <br />  Transfer[] types = new Transfer[] {TextTransfer.getInstance()};<br />  int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;<br />  <br />  //建立拖拽 源————树tree对象<br />  final DragSource source = new DragSource (tree, operations);<br />  source.setTransfer(types);<br />  final TreeItem[] dragSourceItem = new TreeItem[1];<br />  source.addDragListener (new DragSourceListener () {<br />   public void dragStart(DragSourceEvent event) {<br />    TreeItem[] selection = tree.getSelection(); // 获取所选tree的节点<br />    if (selection.length &gt; 0 &amp;&amp; selection[0].getItemCount() == 0) //判断所选节点是否存在并且为末端节点<br />    {<br />     event.doit = true; //启动拖拽功能<br />     dragSourceItem[0] = selection[0]; //保存拖拽节点信息<br />    } else {<br />     event.doit = false;<br />    }<br />   };<br />   public void dragSetData (DragSourceEvent event) {<br />    event.data = dragSourceItem[0].getText(); //保存拖拽节点信息到事件数据中<br />   }<br />   public void dragFinished(DragSourceEvent event) {<br />    if (event.detail == DND.DROP_MOVE)<br />     dragSourceItem[0].dispose();<br />     dragSourceItem[0] = null;<br />   }<br />  });<br />  <br />  //建立拖拽 目的————树tree对象<br />  DropTarget target = new DropTarget(tree, operations);<br />  target.setTransfer(types);<br />  target.addDropListener (new DropTargetAdapter() {<br />   //处理拖拽到目的上空时的方法<br />   public void dragOver(DropTargetEvent event) {<br />    event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL; //响应拖拽动作，FEEDBACK_EXPAND表示拖拽到可以展开的节点时展开相应节点。<br />    if (event.item != null) {<br />     TreeItem item = (TreeItem)event.item;<br />     //处理拖拽动作响应，根据拖拽的位置不同产生不同的响应<br />     Point pt = display.map(null, tree, event.x, event.y); //获取拖拽当前位置点<br />     Rectangle bounds = item.getBounds(); //获取目的节点的边框<br />     <br />     //根据拖拽当前位置点与目的节点的边框位置设置响应，如显示为FEEDBACK_INSERT_BEFORE、FEEDBACK_INSERT_AFTER<br />     if (pt.y &lt; bounds.y + bounds.height/3) {<br />      event.feedback |= DND.FEEDBACK_INSERT_BEFORE;<br />     } else if (pt.y &gt; bounds.y + 2*bounds.height/3) {<br />      event.feedback |= DND.FEEDBACK_INSERT_AFTER;<br />     } else {<br />      event.feedback |= DND.FEEDBACK_SELECT;<br />     }<br />    }<br />   }<br />   //处理放下时的方法<br />   public void drop(DropTargetEvent event) {<br />    if (event.data == null) {<br />     event.detail = DND.DROP_NONE;<br />     return;<br />    }<br />    String text = (String)event.data;<br />    //如果放下的位置没有节点，则新建立一个节点，以根节点为父节点<br />    if (event.item == null) <br />    {<br />     TreeItem item = new TreeItem(tree, SWT.NONE);<br />     item.setText(text);<br />    } <br />    //如果放下的位置有节点<br />    else <br />    {<br />     TreeItem item = (TreeItem)event.item;<br />     Point pt = display.map(null, tree, event.x, event.y);<br />     Rectangle bounds = item.getBounds();<br />     TreeItem parent = item.getParentItem();<br />     if (parent != null) {<br />      TreeItem[] items = parent.getItems();<br />      int index = 0;<br />      for (int i = 0; i &lt; items.length; i++) {<br />       if (items[i] == item) {<br />        index = i;<br />        break;<br />       }<br />      }<br />      if (pt.y &lt; bounds.y + bounds.height/3) {<br />       //以当前节点的父节点为父建立一个子节点，并且插入到当前节点前<br />       TreeItem newItem = new TreeItem(parent, SWT.NONE, index);<br />       newItem.setText(text);<br />      } else if (pt.y &gt; bounds.y + 2*bounds.height/3) {<br />       //以当前节点的父节点为父建立一个子节点，并且插入到当前节点前<br />       TreeItem newItem = new TreeItem(parent, SWT.NONE, index+1);<br />       newItem.setText(text);<br />      } else {<br />       //以当前为父节点建立一个子节点<br />       TreeItem newItem = new TreeItem(item, SWT.NONE);<br />       newItem.setText(text);<br />      }<br />      <br />     } else {<br />      TreeItem[] items = tree.getItems();<br />      int index = 0;<br />      for (int i = 0; i &lt; items.length; i++) {<br />       if (items[i] == item) {<br />        index = i;<br />        break;<br />       }<br />      }<br />      if (pt.y &lt; bounds.y + bounds.height/3) {<br />       TreeItem newItem = new TreeItem(tree, SWT.NONE, index);<br />       newItem.setText(text);<br />      } else if (pt.y &gt; bounds.y + 2*bounds.height/3) {<br />       TreeItem newItem = new TreeItem(tree, SWT.NONE, index+1);<br />       newItem.setText(text);<br />      } else {<br />       TreeItem newItem = new TreeItem(item, SWT.NONE);<br />       newItem.setText(text);<br />      }<br />     }<br />     <br />     <br />    }<br />   }<br />  });</p>
		<p>  shell.setSize (400, 400);<br />  shell.open ();<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<br /><br /></p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 18:05 <a href="http://www.blogjava.net/hengheng123456789/articles/79661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT Tool Tips实现（Tool Tips 类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79658.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79658.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79658.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79658.html</trackback:ping><description><![CDATA[1、使用Shell的<a name="tooltips"><b>Tool Tips</b></a> 实现图像内的<a name="tooltips"><b>Tool Tips</b></a> 。<br /> public static void main (String [] args) {<br />  Display display = new Display ();<br />  final Color [] colors = {<br />   display.getSystemColor (SWT.COLOR_RED),<br />   display.getSystemColor (SWT.COLOR_GREEN),<br />   display.getSystemColor (SWT.COLOR_BLUE),<br />  };<br />  final Rectangle [] rects = {<br />   new Rectangle (10, 10, 30, 30),<br />   new Rectangle (20, 45, 25, 35),<br />   new Rectangle (80, 80, 10, 10),<br />  };<br />  final Shell shell = new Shell (display);<br />  Listener mouseListener = new Listener () {<br />   public void handleEvent (Event event) {<br />    switch (event.type) {<br />     case SWT.MouseEnter:<br />     case SWT.MouseMove:<br />      for (int i=0; i&lt;rects.length; i++) {<br />       if (rects [i].contains (event.x, event.y)) {<br />        String text = "ToolTip " + i;<br />        if (!(text.equals (shell.getToolTipText ()))) {<br />         shell.setToolTipText ("ToolTip " + i);<br />        }<br />        return;<br />       }<br />      }<br />      shell.setToolTipText (null);<br />      break;<br />     }<br />   }<br />  };<br />  shell.addListener (SWT.MouseMove, mouseListener);<br />  shell.addListener (SWT.MouseEnter, mouseListener);<br />  shell.addListener (SWT.Paint, new Listener () {<br />   public void handleEvent (Event event) {<br />    GC gc = event.gc;<br />    for (int i=0; i&lt;rects.length; i++) {<br />     gc.setBackground (colors [i]);<br />     gc.fillRectangle (rects [i]);<br />     gc.drawRectangle (rects [i]);<br />    }<br />   }<br />  });<br />  shell.setSize (200, 200);<br />  shell.open ();<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<br /><br />2、使用Shell实现Tool Tip的功能。<br /> public static void main (String[] args) {<br />  final Display display = new Display ();<br />  final Shell shell = new Shell (display);<br />  shell.setLayout (new FillLayout ());<br />  final Table table = new Table (shell, SWT.BORDER);<br />  for (int i = 0; i &lt; 20; i++) {<br />   TableItem item = new TableItem (table, SWT.NONE);<br />   item.setText ("item " + i);<br />  }<br />  // Disable native tooltip<br />  table.setToolTipText ("");<br />  <br />  // Implement a "fake" tooltip<br />  final Listener labelListener = new Listener () {<br />   public void handleEvent (Event event) {<br />    Label label = (Label)event.widget;<br />    Shell shell = label.getShell ();<br />    switch (event.type) {<br />     case SWT.MouseDown:<br />      Event e = new Event ();<br />      e.item = (TableItem) label.getData ("_TABLEITEM");<br />      // Assuming table is single select, set the selection as if<br />      // the mouse down event went through to the table<br />      table.setSelection (new TableItem [] {(TableItem) e.item});<br />      table.notifyListeners (SWT.Selection, e);<br />      shell.dispose ();<br />      table.setFocus();<br />      break;<br />     case SWT.MouseExit:<br />      shell.dispose ();<br />      break;<br />    }<br />   }<br />  };<br />  <br />  Listener tableListener = new Listener () {<br />   Shell tip = null;<br />   Label label = null;<br />   public void handleEvent (Event event) {<br />    switch (event.type) {<br />     case SWT.Dispose:<br />     case SWT.KeyDown:<br />     case SWT.MouseMove: {<br />      if (tip == null) break;<br />      tip.dispose ();<br />      tip = null;<br />      label = null;<br />      break;<br />     }<br />     case SWT.MouseHover: {<br />      TableItem item = table.getItem (new Point (event.x, event.y));<br />      if (item != null) {<br />       if (tip != null  &amp;&amp; !tip.isDisposed ()) tip.dispose ();<br />       //使用Shell实现Tool Tip的功能<br />       tip = new Shell (shell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);<br />       tip.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND));<br />       FillLayout layout = new FillLayout ();<br />       layout.marginWidth = 2;<br />       tip.setLayout (layout);<br />       label = new Label (tip, SWT.NONE);<br />       label.setForeground (display.getSystemColor (SWT.COLOR_INFO_FOREGROUND));<br />       label.setBackground (display.getSystemColor (SWT.COLOR_INFO_BACKGROUND));<br />       label.setData ("_TABLEITEM", item);<br />       label.setText (item.getText ());<br />       label.addListener (SWT.MouseExit, labelListener);<br />       label.addListener (SWT.MouseDown, labelListener);<br />       Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT);<br />       Rectangle rect = item.getBounds (0);<br />       Point pt = table.toDisplay (rect.x, rect.y);<br />       tip.setBounds (pt.x, pt.y, size.x, size.y);<br />       tip.setVisible (true);<br />      }<br />     }<br />    }<br />   }<br />  };<br />  table.addListener (SWT.Dispose, tableListener);<br />  table.addListener (SWT.KeyDown, tableListener);<br />  table.addListener (SWT.MouseMove, tableListener);<br />  table.addListener (SWT.MouseHover, tableListener);<br />  shell.pack ();<br />  shell.open();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch())<br />    display.sleep();<br />  }<br />  display.dispose();<br /> }<br /><img src ="http://www.blogjava.net/hengheng123456789/aggbug/79658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 17:39 <a href="http://www.blogjava.net/hengheng123456789/articles/79658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT Stack布局（StackLayout 类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79648.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79648.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79648.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79648.html</trackback:ping><description><![CDATA[
		<p>1、不同Componsit间的切换。<br /> static int pageNum = -1;</p>
		<p> public static void main (String [] args) {<br />  Display display = new Display ();<br />  Shell shell = new Shell (display);<br />  shell.setBounds (10, 10, 300, 200);<br />  // create the composite that the pages will share<br />  final Composite contentPanel = new Composite (shell, SWT.BORDER);<br />  contentPanel.setBounds (100, 10, 190, 90);<br />  final StackLayout layout = new StackLayout ();<br />  contentPanel.setLayout (layout);</p>
		<p>  // create the first page's content<br />  Composite page0;<br />  page0 = new Composite (contentPanel, SWT.NONE);<br />  page0.setLayout (new RowLayout ());<br />  Label label = new Label (page0, SWT.NONE);<br />  label.setText ("Label on page 1");<br />  label.pack ();</p>
		<p>  // create the second page's content <br />  Composite page1;<br />  page1 = new Composite (contentPanel, SWT.NONE);<br />  page1.setLayout (new RowLayout ());<br />  Button button = new Button (page1, SWT.NONE);<br />  button.setText ("Button on page 2");<br />  button.pack ();</p>
		<p>  // create the button that will switch between the pages<br />  Button pageButton = new Button (shell, SWT.PUSH);<br />  pageButton.setText ("Push");<br />  pageButton.setBounds (10, 10, 80, 25);<br />  pageButton.addListener (SWT.Selection, new Listener () {<br />   public void handleEvent (Event event) {<br />    pageNum = ++pageNum % 2;<br />    contentPanel.layout ();<br />   }<br />  });<br />  layout.topControl = page0;</p>
		<p>  shell.open ();<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }</p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 17:14 <a href="http://www.blogjava.net/hengheng123456789/articles/79648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT Swing/AWT （Swing/AWT 类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79645.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79645.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79645.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79645.html</trackback:ping><description><![CDATA[
		<p>
				<a name="awt">
						<b>Swing/AWT</b>
				</a> 主要是可以在SWT中使用<a name="awt"><b>Swing/AWT</b></a> ，但是是有条件的。<br /><br />1、集成简单的AWT表和标签。<br /> static class FileTableModel extends AbstractTableModel {  <br />  File[] files;        <br />  String[] columnsName = {"Name", "Size", "Date Modified"};<br />  <br />  public FileTableModel (File[] files) {<br />   this.files = files;<br />  }<br />  public int getColumnCount () {<br />   return columnsName.length;<br />  }<br />  public Class getColumnClass (int col) {<br />   if (col == 1) return Long.class;<br />   if (col == 2) return Date.class;<br />   return String.class;<br />  }<br />  public int getRowCount () {<br />   return files == null ? 0 : files.length;<br />  }<br />  public Object getValueAt (int row, int col) {<br />   if (col == 0) return files[row].getName();<br />   if (col == 1) return new Long(files[row].length());<br />   if (col == 2) return new Date(files[row].lastModified());<br />   return "";<br />  }<br />  public String getColumnName (int col) {<br />   return columnsName[col];<br />  }<br /> }</p>
		<p> public static void main(String[] args) {<br />  final Display display = new Display();<br />  final Shell shell = new Shell(display);<br />  shell.setText("SWT and Swing/AWT Example");</p>
		<p>  Listener exitListener = new Listener() {<br />   public void handleEvent(Event e) {<br />    MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);<br />    dialog.setText("Question");<br />    dialog.setMessage("Exit?");<br />    if (e.type == SWT.Close) e.doit = false;<br />    if (dialog.open() != SWT.OK) return;<br />    shell.dispose();<br />   }<br />  }; <br />  Listener aboutListener = new Listener() {<br />   public void handleEvent(Event e) {<br />    final Shell s = new Shell(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);<br />    s.setText("About");<br />    GridLayout layout = new GridLayout(1, false);<br />    layout.verticalSpacing = 20;<br />    layout.marginHeight = layout.marginWidth = 10;<br />    s.setLayout(layout);<br />    Label label = new Label(s, SWT.NONE);<br />    label.setText("SWT and AWT Example.");<br />    Button button = new Button(s, SWT.PUSH);<br />    button.setText("OK");<br />    GridData data = new GridData();<br />    data.horizontalAlignment = GridData.CENTER;<br />    button.setLayoutData(data);<br />    button.addListener(SWT.Selection, new Listener() {<br />     public void handleEvent(Event event) {<br />      s.dispose();<br />     }<br />    });<br />    s.pack();<br />    Rectangle parentBounds = shell.getBounds();<br />    Rectangle bounds = s.getBounds();<br />    int x = parentBounds.x + (parentBounds.width - bounds.width) / 2;<br />    int y = parentBounds.y + (parentBounds.height - bounds.height) / 2;<br />    s.setLocation(x, y);<br />    s.open();<br />    while (!s.isDisposed()) {<br />     if (!display.readAndDispatch()) display.sleep();<br />    }<br />   }<br />  };<br />  shell.addListener(SWT.Close, exitListener);<br />  Menu mb = new Menu(shell, SWT.BAR);<br />  MenuItem fileItem = new MenuItem(mb, SWT.CASCADE);<br />  fileItem.setText("&amp;File");<br />  Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);<br />  fileItem.setMenu(fileMenu);<br />  MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH);<br />  exitItem.setText("&amp;Exit\tCtrl+X");<br />  exitItem.setAccelerator(SWT.CONTROL + 'X');<br />  exitItem.addListener(SWT.Selection, exitListener);<br />  MenuItem aboutItem = new MenuItem(fileMenu, SWT.PUSH);<br />  aboutItem.setText("&amp;About\tCtrl+A");<br />  aboutItem.setAccelerator(SWT.CONTROL + 'A');<br />  aboutItem.addListener(SWT.Selection, aboutListener);<br />  shell.setMenuBar(mb);</p>
		<p>  RGB color = shell.getBackground().getRGB();<br />  Label separator1 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);<br />  Label locationLb = new Label(shell, SWT.NONE);<br />  locationLb.setText("Location:");<br />  Composite locationComp = new Composite(shell, SWT.EMBEDDED);<br />  ToolBar toolBar = new ToolBar(shell, SWT.FLAT);<br />  ToolItem exitToolItem = new ToolItem(toolBar, SWT.PUSH);<br />  exitToolItem.setText("&amp;Exit");<br />  exitToolItem.addListener(SWT.Selection, exitListener);<br />  ToolItem aboutToolItem = new ToolItem(toolBar, SWT.PUSH);<br />  aboutToolItem.setText("&amp;About");<br />  aboutToolItem.addListener(SWT.Selection, aboutListener);<br />  Label separator2 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);<br />  final Composite comp = new Composite(shell, SWT.NONE);<br />  final Tree fileTree = new Tree(comp, SWT.SINGLE | SWT.BORDER);<br />  Sash sash = new Sash(comp, SWT.VERTICAL);<br />  Composite tableComp = new Composite(comp, SWT.EMBEDDED); //Composite对象必须为SWT.EMBEDDED才可以装载awt/swing内容<br />  Label separator3 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);<br />  Composite statusComp = new Composite(shell, SWT.EMBEDDED);</p>
		<p>  java.awt.Frame locationFrame = SWT_AWT.new_Frame(locationComp);<br />  final java.awt.TextField locationText = new java.awt.TextField();<br />  locationFrame.add(locationText);</p>
		<p>  //处理awt表<br />  java.awt.Frame fileTableFrame = SWT_AWT.new_Frame(tableComp);<br />  java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());<br />  fileTableFrame.add(panel);<br />  final JTable fileTable = new JTable(new FileTableModel(null));<br />  fileTable.setDoubleBuffered(true);<br />  fileTable.setShowGrid(false);<br />  fileTable.createDefaultColumnsFromModel();<br />  JScrollPane scrollPane = new JScrollPane(fileTable);<br />  panel.add(scrollPane);</p>
		<p>  //处理awt状态Label<br />  java.awt.Frame statusFrame = SWT_AWT.new_Frame(statusComp);<br />  statusFrame.setBackground(new java.awt.Color(color.red, color.green, color.blue));<br />  final java.awt.Label statusLabel = new java.awt.Label();<br />  statusFrame.add(statusLabel);<br />  statusLabel.setText("Select a file");</p>
		<p>  sash.addListener(SWT.Selection, new Listener() {<br />   public void handleEvent(Event e) {<br />    if (e.detail == SWT.DRAG) return;<br />    GridData data = (GridData)fileTree.getLayoutData();<br />    Rectangle trim = fileTree.computeTrim(0, 0, 0, 0);<br />    data.widthHint = e.x - trim.width;<br />    comp.layout();<br />   }<br />  });</p>
		<p>  File[] roots = File.listRoots();<br />  for (int i = 0; i &lt; roots.length; i++) {<br />   File file = roots[i];<br />   TreeItem treeItem = new TreeItem(fileTree, SWT.NONE);<br />   treeItem.setText(file.getAbsolutePath());<br />   treeItem.setData(file);<br />   new TreeItem(treeItem, SWT.NONE);<br />  }<br />  fileTree.addListener(SWT.Expand, new Listener() {<br />   public void handleEvent(Event e) {<br />    TreeItem item = (TreeItem)e.item;<br />    if (item == null) return;<br />    if (item.getItemCount() == 1) {<br />     TreeItem firstItem = item.getItems()[0];<br />     if (firstItem.getData() != null) return;<br />     firstItem.dispose();<br />    } else {<br />     return;<br />    }<br />    File root = (File)item.getData();<br />    File[] files = root.listFiles();<br />    if (files == null) return;<br />    for (int i = 0; i &lt; files.length; i++) {<br />     File file = files[i];<br />     if (file.isDirectory()) {<br />      TreeItem treeItem = new TreeItem(item, SWT.NONE);<br />      treeItem.setText(file.getName());<br />      treeItem.setData(file);<br />      new TreeItem(treeItem, SWT.NONE);<br />     }<br />    }<br />   }<br />  });<br />  fileTree.addListener(SWT.Selection, new Listener() {<br />   public void handleEvent(Event e) {<br />    TreeItem item = (TreeItem)e.item;<br />    if (item == null) return;<br />    final File root = (File)item.getData();<br />    EventQueue.invokeLater(new Runnable() {<br />     public void run() {<br />      statusLabel.setText(root.getAbsolutePath());<br />      locationText.setText(root.getAbsolutePath());<br />      fileTable.setModel(new FileTableModel(root.listFiles()));<br />     }<br />    });<br />   }<br />  });<br />  <br />  GridLayout layout = new GridLayout(4, false);<br />  layout.marginWidth = layout.marginHeight = 0;<br />  layout.horizontalSpacing = layout.verticalSpacing = 1;<br />  shell.setLayout(layout);<br />  GridData data;  <br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 4;<br />  separator1.setLayoutData(data);<br />  data = new GridData();<br />  data.horizontalSpan = 1;<br />  data.horizontalIndent = 10;<br />  locationLb.setLayoutData(data);<br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 2;<br />  data.heightHint = locationText.getPreferredSize().height;<br />  locationComp.setLayoutData(data);<br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 1;<br />  toolBar.setLayoutData(data);<br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 4;<br />  separator2.setLayoutData(data);<br />  data = new GridData(GridData.FILL_BOTH);<br />  data.horizontalSpan = 4;<br />  comp.setLayoutData(data);<br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 4;<br />  separator3.setLayoutData(data);<br />  data = new GridData(GridData.FILL_HORIZONTAL);<br />  data.horizontalSpan = 4;<br />  data.heightHint = statusLabel.getPreferredSize().height;<br />  statusComp.setLayoutData(data);<br />  <br />  layout = new GridLayout(3, false);<br />  layout.marginWidth = layout.marginHeight = 0;<br />  layout.horizontalSpacing = layout.verticalSpacing = 1;<br />  comp.setLayout(layout);   <br />  data = new GridData(GridData.FILL_VERTICAL);<br />  data.widthHint = 200;<br />  fileTree.setLayoutData(data);  <br />  data = new GridData(GridData.FILL_VERTICAL);<br />  sash.setLayoutData(data);  <br />  data = new GridData(GridData.FILL_BOTH);<br />  tableComp.setLayoutData(data);</p>
		<p>  shell.open();<br />  while(!shell.isDisposed()) {<br />   if (!display.readAndDispatch()) display.sleep();<br />  }<br />  display.dispose();<br /> }<br /><br /></p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 17:09 <a href="http://www.blogjava.net/hengheng123456789/articles/79645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT 目录对话框（DirectoryDialog类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79615.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79615.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79615.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79615.html</trackback:ping><description><![CDATA[显示一个简单的目录对话框<br /><br /> public static void main (String [] args) {<br />  Display display = new Display ();<br />  Shell shell = new Shell (display);<br />  shell.open ();<br />  DirectoryDialog dialog = new DirectoryDialog (shell);<br />  dialog.setFilterPath ("c:\\"); //Windows specific<br />  System.out.println ("RESULT=" + dialog.open ());<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 15:13 <a href="http://www.blogjava.net/hengheng123456789/articles/79615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT 文件对话框（FileDialog类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79614.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79614.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79614.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79614.html</trackback:ping><description><![CDATA[1、显示一个简单的保存对话框。<br /> public static void main (String [] args) {<br />  Display display = new Display ();<br />  Shell shell = new Shell (display);<br />  shell.open ();<br />  FileDialog dialog = new FileDialog (shell, SWT.SAVE);<br />  dialog.setFilterNames (new String [] {"Batch Files", "All Files (*.*)"});<br />  dialog.setFilterExtensions (new String [] {"*.bat", "*.*"}); //Windows wild cards<br />  dialog.setFilterPath ("c:\\"); //Windows path<br />  dialog.setFileName ("fred.bat");<br />  System.out.println ("Save to: " + dialog.open ()); //打开对话框<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 15:11 <a href="http://www.blogjava.net/hengheng123456789/articles/79614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT 绘图（GC类）</title><link>http://www.blogjava.net/hengheng123456789/articles/79610.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 07 Nov 2006 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/79610.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/79610.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/79610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/79610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/79610.html</trackback:ping><description><![CDATA[
		<p>1、点击鼠标左键在shell里画线。<br /><br /> public static void main(String[] args)<br /> {<br />  Display display = new Display();<br />  final Shell shell = new Shell(display);<br />  Listener listener = new Listener() {<br />   int lastX = 0, lastY = 0;</p>
		<p>   public void handleEvent(Event event)<br />   {<br />    switch (event.type)<br />    {<br />     case SWT.MouseMove :<br />      if ((event.stateMask &amp; SWT.BUTTON1) == 0)<br />       break; // 判断是否为鼠标左键，如果不是跳出<br />      GC gc = new GC(shell);<br />      gc.drawLine(lastX, lastY, event.x, event.y);<br />      gc.dispose();<br />     // FALL THROUGH<br />     case SWT.MouseDown :<br />      lastX = event.x;<br />      lastY = event.y;<br />      break;<br />    }<br />   }<br />  };<br />  shell.addListener(SWT.MouseDown, listener);<br />  shell.addListener(SWT.MouseMove, listener);<br />  shell.open();<br />  while (!shell.isDisposed())<br />  {<br />   if (!display.readAndDispatch())<br />    display.sleep();<br />  }<br />  display.dispose();<br /> }<br /><br />2、在弹出窗口中显示表的当时图像状态。<br /> public static void main(String[] args) {<br />  final Display display = new Display();<br />  final Shell shell = new Shell(display);<br />  shell.setText("Widget");<br />  <br />  //建立一个简单的表<br />  final Table table = new Table(shell, SWT.MULTI);<br />  table.setLinesVisible(true);<br />  table.setBounds(10, 10, 100, 100);<br />  for (int i = 0; i &lt; 9; i++) {<br />   new TableItem(table, SWT.NONE).setText("item" + i);<br />  }<br />  <br />  //建立捕捉图像的按钮<br />  Button button = new Button(shell, SWT.PUSH);<br />  button.setText("Capture");<br />  button.pack();<br />  button.setLocation(10, 140);<br />  <br />  <br />  button.addListener(SWT.Selection, new Listener() {<br />   public void handleEvent(Event event) {<br />    Point tableSize = table.getSize(); //获取表的大小<br />    GC gc = new GC(table); //建立表的GC对象<br />    final Image image =<br />     new Image(display, tableSize.x, tableSize.y); //建立表大小的图像image<br />    gc.copyArea(image, 0, 0); //利用表的GC对象把表的图像复制到image中<br />    gc.dispose();<br />    <br />    //建立一个弹出面板Shell对象popup<br />    Shell popup = new Shell(shell);<br />    popup.setText("Image");<br />    popup.addListener(SWT.Close, new Listener() {<br />     public void handleEvent(Event e) {<br />      image.dispose();<br />     }<br />    });<br />    //在popup上建立画布对象canvas<br />    Canvas canvas = new Canvas(popup, SWT.NONE);<br />    canvas.setBounds(10, 10, tableSize.x+10, tableSize.y+10);<br />    canvas.addPaintListener(new PaintListener() {<br />     public void paintControl(PaintEvent e) {<br />      e.gc.drawImage(image, 0, 0); //在画布上绘出表的图像image<br />     }<br />    });<br />    popup.pack();<br />    popup.open();<br />   }<br />  });<br />  shell.pack();<br />  shell.open();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch()) display.sleep();<br />  }<br />  display.dispose();<br /> }<br /><br />3、获取整个窗口的图像并显示。<br /> public static void main(String[] args) {<br />  final Display display = new Display();<br />  final Shell shell = new Shell(display);<br />  shell.setLayout(new FillLayout());<br />  Button button = new Button(shell, SWT.PUSH);<br />  button.setText("Capture");<br />  button.addListener(SWT.Selection, new Listener() {<br />   public void handleEvent(Event event) {<br />    <br />    /* Take the screen shot */<br />    GC gc = new GC(display);<br />    final Image image = new Image(display, display.getBounds());<br />    gc.copyArea(image, 0, 0);<br />    gc.dispose();<br />    <br />    Shell popup = new Shell(shell, SWT.SHELL_TRIM);<br />    popup.setLayout(new FillLayout());<br />    popup.setText("Image");<br />    popup.setBounds(50, 50, 200, 200);<br />    popup.addListener(SWT.Close, new Listener() {<br />     public void handleEvent(Event e) {<br />      image.dispose();<br />     }<br />    });<br />    <br />    ScrolledComposite sc = new ScrolledComposite (popup, SWT.V_SCROLL | SWT.H_SCROLL);<br />    Canvas canvas = new Canvas(sc, SWT.NONE);<br />    sc.setContent(canvas);<br />    canvas.setBounds(display.getBounds ());<br />    canvas.addPaintListener(new PaintListener() {<br />     public void paintControl(PaintEvent e) {<br />      e.gc.drawImage(image, 0, 0);<br />     }<br />    });<br />    popup.open();<br />   }<br />  });<br />  shell.pack();<br />  shell.open();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch()) display.sleep();<br />  }<br />  display.dispose();<br /> }<br /><br />4、使用transform、alpha和paths混合技术绘图。注意：必须在项目中import“swt-gdip-win32-3139.dll”。<br /> public static void main(String[] args) {<br />  final Display display = new Display();<br />  final Shell shell = new Shell(display);<br />  shell.setText("Advanced Graphics");<br />  FontData fd = shell.getFont().getFontData()[0];<br />  final Font font = new Font(display, fd.getName(), 60, SWT.BOLD | SWT.ITALIC);<br />  final Image image = new Image(display, 640, 480);<br />  final Rectangle rect = image.getBounds();<br />  GC gc = new GC(image);<br />  gc.setBackground(display.getSystemColor(SWT.COLOR_RED));<br />  gc.fillOval(rect.x, rect.y, rect.width, rect.height);<br />  gc.dispose();<br />  shell.addListener(SWT.Paint, new Listener() {<br />   public void handleEvent(Event event) {<br />    GC gc = event.gc;    <br />    Transform tr = new Transform(display);<br />    tr.translate(50, 120);<br />    tr.rotate(-30);<br />    gc.drawImage(image, 0, 0, rect.width, rect.height, 0, 0, rect.width / 2, rect.height / 2);<br />    gc.setAlpha(100);<br />    gc.setTransform(tr);<br />    Path path = new Path(display);<br />    path.addString("SWT", 0, 0, font);<br />    gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));<br />    gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));<br />    gc.fillPath(path);<br />    gc.drawPath(path);<br />    tr.dispose();<br />    path.dispose();<br />   }   <br />  });<br />  shell.setSize(shell.computeSize(rect.width / 2, rect.height / 2));<br />  shell.open();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch())<br />    display.sleep();<br />  }<br />  image.dispose();<br />  font.dispose();<br />  display.dispose();<br /> }<br /><br />5、对图像进行旋转。<br /> public static void main(String[] args) {<br />  final Display display = new Display();<br />  <br />  final Image image = new Image(display, 110, 60);<br />  GC gc = new GC(image);<br />  Font font = new Font(display, "Times", 30, SWT.BOLD);<br />  gc.setFont(font);<br />  gc.setBackground(display.getSystemColor(SWT.COLOR_RED));<br />  gc.fillRectangle(0, 0, 110, 60);<br />  gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));<br />  gc.drawText("SWT", 10, 10, true);<br />  font.dispose();<br />  gc.dispose();<br />  <br />  final Rectangle rect = image.getBounds();<br />  Shell shell = new Shell(display);<br />  shell.setText("Matrix Tranformations");<br />  shell.setLayout(new FillLayout());<br />  final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);<br />  canvas.addPaintListener(new PaintListener () {<br />   public void paintControl(PaintEvent e) { <br />    GC gc = e.gc;<br />    gc.setAdvanced(true);<br />    if (!gc.getAdvanced()){<br />     gc.drawText("Advanced graphics not supported", 30, 30, true);<br />     return;<br />    }<br />    <br />    // Original image<br />    int x = 30, y = 30;<br />    gc.drawImage(image, x, y); <br />    x += rect.width + 30;<br />    <br />    Transform transform = new Transform(display);<br />    <br />    // Note that the tranform is applied to the whole GC therefore<br />    // the coordinates need to be adjusted too.<br />    <br />    // Reflect around the y axis.<br />    transform.setElements(-1, 0, 0, 1, 0 ,0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, -1*x-rect.width, y);<br />    <br />    x = 30; y += rect.height + 30;<br />    <br />    // Reflect around the x axis. <br />    transform.setElements(1, 0, 0, -1, 0, 0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, x, -1*y-rect.height);<br />    <br />    x += rect.width + 30;<br />    <br />    // Reflect around the x and y axes <br />    transform.setElements(-1, 0, 0, -1, 0, 0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, -1*x-rect.width, -1*y-rect.height);<br />    <br />    x = 30; y += rect.height + 30;<br />    <br />    // Shear in the x-direction<br />    transform.setElements(1, 0, -1, 1, 0, 0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, 300, y);<br />    <br />    // Shear in y-direction<br />    transform.setElements(1, -1, 0, 1, 0, 0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, 150, 475);<br />    <br />    // Rotate by 45 degrees <br />    float cos45 = (float)Math.cos(45);<br />    float sin45 = (float)Math.sin(45);<br />    transform.setElements(cos45, sin45, -sin45, cos45, 0, 0);<br />    gc.setTransform(transform);<br />    gc.drawImage(image, 350, 100);<br />    <br />    transform.dispose();<br />   }<br />  });<br />  <br />  shell.setSize(350, 550);<br />  shell.open();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch())<br />    display.sleep();<br />  }<br />  image.dispose();<br />  display.dispose();<br /> }</p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/79610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-07 15:05 <a href="http://www.blogjava.net/hengheng123456789/articles/79610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT 树（Tree类）</title><link>http://www.blogjava.net/hengheng123456789/articles/78734.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Thu, 02 Nov 2006 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/78734.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/78734.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/78734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/78734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/78734.html</trackback:ping><description><![CDATA[树（Tree类）应用实例如下：<br /><br />1、简单树<br /> public static void main (String [] args) {<br />  Display display = new Display ();<br />  Shell shell = new Shell (display);<br />  shell.setLayout(new FillLayout());<br />  <br />  final Tree tree = new Tree (shell, SWT.BORDER);<br />  <br />  for (int i=0; i&lt;4; i++) {<br />   TreeItem iItem = new TreeItem (tree, 0);<br />   iItem.setText ("TreeItem (0) -" + i);<br />   for (int j=0; j&lt;4; j++) {<br />    TreeItem jItem = new TreeItem (iItem, 0);<br />    jItem.setText ("TreeItem (1) -" + j);<br />    for (int k=0; k&lt;4; k++) {<br />     TreeItem kItem = new TreeItem (jItem, 0);<br />     kItem.setText ("TreeItem (2) -" + k);<br />     for (int l=0; l&lt;4; l++) {<br />      TreeItem lItem = new TreeItem (kItem, 0);<br />      lItem.setText ("TreeItem (3) -" + l);<br />     }<br />    }<br />   }<br />  }<br />  shell.setSize (200, 200);<br />  shell.open ();<br />  while (!shell.isDisposed()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<br /><br />2、类似资源管理器的树，其中包含鼠标双击事件<br /> public static void main (String [] args) {<br />  final Display display = new Display ();<br />  final Shell shell = new Shell (display);<br />  shell.setText ("Lazy Tree");<br />  shell.setLayout (new FillLayout ());<br />  <br />  final Tree tree = new Tree (shell, SWT.BORDER);<br />  File [] roots = File.listRoots ();<br />  for (int i=0; i&lt;roots.length; i++) {<br />   TreeItem root = new TreeItem (tree, 0);<br />   root.setText (roots [i].toString ());<br />   root.setData (roots [i]);//保存当前节点数据<br />   new TreeItem (root, 0);//把当前节点作为目录节点<br />  }<br />  <br />  tree.addListener (SWT.Expand, new Listener () {<br />   public void handleEvent (final Event event) {<br />    final TreeItem root = (TreeItem) event.item;<br />    TreeItem [] items = root.getItems ();<br />    for (int i= 0; i&lt;items.length; i++) {<br />     if (items [i].getData () != null) return;<br />     items [i].dispose ();<br />    }<br />    File file = (File) root.getData ();<br />    File [] files = file.listFiles ();<br />    if (files == null) return;<br />    for (int i= 0; i&lt;files.length; i++) {<br />     TreeItem item = new TreeItem (root, 0);<br />     item.setText (files [i].getName ());<br />     item.setData (files [i]);<br />     if (files [i].isDirectory()) {<br />      new TreeItem (item, 0);<br />     }<br />    }<br />   }<br />  });<br />    tree.addListener (SWT.MouseDoubleClick, new Listener () {<br />   public void handleEvent (Event event) {<br />    Point point = new Point (event.x, event.y);<br />    TreeItem item = tree.getItem (point);<br />    if (item != null) {<br />     System.out.println ("Mouse down: " + item);<br />    }<br />   }<br />  });<br />  //根据Tree的大小更改shell的大小<br />  Point size = tree.computeSize (300, SWT.DEFAULT);<br />  int width = Math.max (300, size.x);<br />  int height = Math.max (300, size.y);<br />  shell.setSize (shell.computeSize (width, height));<br />  shell.open ();<br />  while (!shell.isDisposed ()) {<br />   if (!display.readAndDispatch ()) display.sleep ();<br />  }<br />  display.dispose ();<br /> }<br /><img src ="http://www.blogjava.net/hengheng123456789/aggbug/78734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-02 17:31 <a href="http://www.blogjava.net/hengheng123456789/articles/78734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT 分割窗（SashForm类）</title><link>http://www.blogjava.net/hengheng123456789/articles/78709.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Thu, 02 Nov 2006 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/78709.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/78709.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/78709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/78709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/78709.html</trackback:ping><description><![CDATA[分割窗（SashForm类）实例如下：<br /><br /><font face="Courier New"><font color="#3f7f5f">/*<br /></font><font color="#ffffff"> </font><font color="#3f7f5f">* SashForm example snippet: create a sash form with three children</font><br /><font color="#ffffff"> </font><font color="#3f7f5f">*</font><br /><font color="#ffffff"> </font><font color="#3f7f5f">* For a list of all SWT example snippets see</font><br /><font color="#ffffff"> </font><font color="#3f7f5f">* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets</font><br /><font color="#ffffff"> </font><font color="#3f7f5f">*/</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.SWT;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.custom.SashForm;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.layout.FillLayout;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.widgets.Button;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.widgets.Composite;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.widgets.Display;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.widgets.Label;</font><br /><font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.swt.widgets.Shell;</font><br /><font color="#ffffff"></font><br /><font color="#7f0055"><b>public class </b></font><font color="#000000">Snippet109 </font><font color="#000000">{</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">  </font><font color="#7f0055"><b>public static </b></font><font color="#7f0055"><b>void </b></font><font color="#000000">main</font><font color="#000000">(</font><font color="#000000">String</font><font color="#000000">[] </font><font color="#000000">args</font><font color="#000000">) {</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>final </b></font><font color="#000000">Display display = </font><font color="#7f0055"><b>new </b></font><font color="#000000">Display</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">Shell shell = </font><font color="#7f0055"><b>new </b></font><font color="#000000">Shell</font><font color="#000000">(</font><font color="#000000">display</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">shell.setLayout</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">FillLayout</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">    </font><font color="#000000">SashForm </font><font color="#7f0055"><b>form </b></font><font color="#000000">= </font><font color="#7f0055"><b>new </b></font><font color="#000000">SashForm</font><font color="#000000">(</font><font color="#000000">shell, SWT.HORIZONTAL</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>form</b></font><font color="#000000">.setLayout</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">FillLayout</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">    </font><font color="#000000">Composite child1 = </font><font color="#7f0055"><b>new </b></font><font color="#000000">Composite</font><font color="#000000">(</font><font color="#000000">form, SWT.NONE</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">child1.setLayout</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">FillLayout</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>new </b></font><font color="#000000">Label</font><font color="#000000">(</font><font color="#000000">child1, SWT.NONE</font><font color="#000000">)</font><font color="#000000">.setText</font><font color="#000000">(</font><font color="#2a00ff">"Label in pane 1"</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">    </font><font color="#000000">Composite child2 = </font><font color="#7f0055"><b>new </b></font><font color="#000000">Composite</font><font color="#000000">(</font><font color="#000000">form, SWT.NONE</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">child2.setLayout</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">FillLayout</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>new </b></font><font color="#000000">Button</font><font color="#000000">(</font><font color="#000000">child2, SWT.PUSH</font><font color="#000000">)</font><font color="#000000">.setText</font><font color="#000000">(</font><font color="#2a00ff">"Button in pane2"</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">    </font><font color="#000000">Composite child3 = </font><font color="#7f0055"><b>new </b></font><font color="#000000">Composite</font><font color="#000000">(</font><font color="#000000">form, SWT.NONE</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">child3.setLayout</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#000000">FillLayout</font><font color="#000000">())</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>new </b></font><font color="#000000">Label</font><font color="#000000">(</font><font color="#000000">child3, SWT.PUSH</font><font color="#000000">)</font><font color="#000000">.setText</font><font color="#000000">(</font><font color="#2a00ff">"Label in pane3"</font><font color="#000000">)</font><font color="#000000">;</font><br /><font color="#ffffff"></font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>form</b></font><font color="#000000">.setWeights</font><font color="#000000">(</font><font color="#7f0055"><b>new </b></font><font color="#7f0055"><b>int</b></font><font color="#000000">[] { </font><font color="#990000">30</font><font color="#000000">, </font><font color="#990000">40</font><font color="#000000">, </font><font color="#990000">30 </font><font color="#000000">})</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">shell.open</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#7f0055"><b>while </b></font><font color="#000000">(</font><font color="#000000">!shell.isDisposed</font><font color="#000000">()) {</font><br /><font color="#ffffff">      </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">!display.readAndDispatch</font><font color="#000000">())</font><br /><font color="#ffffff">        </font><font color="#000000">display.sleep</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">    </font><font color="#000000">}</font><br /><font color="#ffffff">    </font><font color="#000000">display.dispose</font><font color="#000000">()</font><font color="#000000">;</font><br /><font color="#ffffff">  </font><font color="#000000">}</font><br /><font color="#000000">}</font></font><br /><img src ="http://www.blogjava.net/hengheng123456789/aggbug/78709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-11-02 15:47 <a href="http://www.blogjava.net/hengheng123456789/articles/78709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT入门（1）</title><link>http://www.blogjava.net/hengheng123456789/articles/78223.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Tue, 31 Oct 2006 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/78223.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/78223.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/78223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/78223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/78223.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 书写				swt				程序的基本步骤如下：1.      创建一个Display对象。2.      创建一个或者多个Shell对象，你可以认为Shell代表了程序的窗口。3.      在Shell内创建各种部件（widget）。4.      对各个部件进行初始化（外观，状态等），同时为各种部件的事件创建监听器（listener）。5.      调用Shell对象的open()方...&nbsp;&nbsp;<a href='http://www.blogjava.net/hengheng123456789/articles/78223.html'>阅读全文</a><img src ="http://www.blogjava.net/hengheng123456789/aggbug/78223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-10-31 10:36 <a href="http://www.blogjava.net/hengheng123456789/articles/78223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT概述</title><link>http://www.blogjava.net/hengheng123456789/articles/78124.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Mon, 30 Oct 2006 10:18:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/78124.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/78124.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/78124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/78124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/78124.html</trackback:ping><description><![CDATA[
		<span lang="EN-US">      SWT/JFace</span>
		<span style="FONT-FAMILY: 宋体">象一股清新的风吹入了</span>
		<span lang="EN-US">Java</span>
		<span style="FONT-FAMILY: 宋体">的</span>
		<span lang="EN-US">GUI</span>
		<span style="FONT-FAMILY: 宋体">开发领域，为这个沉闷的领域带来了勃勃生机。虽然</span>
		<span lang="EN-US">SUN</span>
		<span style="FONT-FAMILY: 宋体">不接纳</span>
		<span lang="EN-US">SWT/JFace</span>
		<span style="FONT-FAMILY: 宋体">作为</span>
		<span lang="EN-US">Java</span>
		<span style="FONT-FAMILY: 宋体">中的一种图形</span>
		<span lang="EN-US">API</span>
		<span style="FONT-FAMILY: 宋体">标准，但它虽然借着</span>
		<span lang="EN-US">Eclipse</span>
		<span style="FONT-FAMILY: 宋体">的优异表现，以不可阻挡之势向前发展着。终于可以用</span>
		<span lang="EN-US">SWT</span>
		<span style="FONT-FAMILY: 宋体">轻松的开发出高效率的</span>
		<span lang="EN-US">GUI</span>
		<span style="FONT-FAMILY: 宋体">程序，且拥有标准的</span>
		<span lang="EN-US">Windows</span>
		<span style="FONT-FAMILY: 宋体">外观，</span>
		<span lang="EN-US">Eclipse</span>
		<span style="FONT-FAMILY: 宋体">软件就是基于</span>
		<span lang="EN-US">SWT/JFace</span>
		<span style="FONT-FAMILY: 宋体">构建的，大家看看</span>
		<span lang="EN-US">Eclipse3.0</span>
		<span style="FONT-FAMILY: 宋体">就知道</span>
		<span lang="EN-US">SWT</span>
		<span style="FONT-FAMILY: 宋体">有多么的棒。<br /><br />   为了方便开发<span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">程序，在</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">基础上又创建了一个更易用、功能强大的图形包“</span><span lang="EN-US">JFace</span><span style="FONT-FAMILY: 宋体">”。然而，</span><span lang="EN-US">JFace</span><span style="FONT-FAMILY: 宋体">并不能完全覆盖</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">的所有功能，所以编程时</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">JFace</span><span style="FONT-FAMILY: 宋体">都会要用到，<strong><font color="#800080">但是一般来说，能用</font></strong></span><strong><font color="#800080"><span lang="EN-US">JFace</span><span style="FONT-FAMILY: 宋体">的组件就最好不要用</span><span lang="EN-US">SWT</span></font></strong><span style="FONT-FAMILY: 宋体"><strong><font color="#800080">的</font></strong>。<br /><br /><strong><font style="BACKGROUND-COLOR: #008000">SWT<span style="FONT-FAMILY: 黑体">中的包</span></font></strong><p class="MsoNormal"><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">是</span><span lang="EN-US">Eclipse</span><span style="FONT-FAMILY: 宋体">图形</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体">的基础，本节将简单介绍一下</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">中所包含的子包。</span></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">1</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.widgets</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">最常用的组件基本都在此包中，如</span><span lang="EN-US">Button</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Text</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Label</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Combo</span><span style="FONT-FAMILY: 宋体">等。其中两个最重要的组件当数</span><span lang="EN-US">Shell</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Composite</span><span style="FONT-FAMILY: 宋体">：</span><font color="#800080"><span lang="EN-US">Shell</span><span style="FONT-FAMILY: 宋体">相当于应用程序的主窗口；</span><span lang="EN-US">Composite</span><span style="FONT-FAMILY: 宋体">相当于</span><span lang="EN-US">SWING</span><span style="FONT-FAMILY: 宋体">中的</span><span lang="EN-US">Panel</span></font><span style="FONT-FAMILY: 宋体"><font color="#800080">对象</font>，是容纳组件的容器。</span></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">2</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.layout</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">主要的界面布局方式在此包中。</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">对组件的布局也采用了</span><span lang="EN-US">AWT/SWING</span><span style="FONT-FAMILY: 宋体">中的</span><span lang="EN-US">Layout</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Layout Data</span><span style="FONT-FAMILY: 宋体">结合的方式。</span></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">3</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.custom</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">对一些基本图形组件的扩展在此包中，比如其中的</span><span lang="EN-US">CLabel</span><span style="FONT-FAMILY: 宋体">就是对标准</span><span lang="EN-US">Label</span><span style="FONT-FAMILY: 宋体">组件的扩展，在</span><span lang="EN-US">CLabel</span><span style="FONT-FAMILY: 宋体">上可以同时加入文字和图片。在此包中还有一个新的布局方式</span><span lang="EN-US">StackLayout</span><span style="FONT-FAMILY: 宋体">。</span></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">4</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.event</span></p><p class="MsoNormal"><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">采用了和</span><span lang="EN-US">AWT/SWING</span><span style="FONT-FAMILY: 宋体">一样的事件模型，在包中可以找到事件监听类和相应的事件对象。比如，<font color="#800080">鼠标事件监听器</font></span><font color="#800080"><span lang="EN-US">MouseListener</span><span style="FONT-FAMILY: 宋体">，</span><span lang="EN-US">MouseMoveListener</span><span style="FONT-FAMILY: 宋体">等，及对应的事件对象</span><span lang="EN-US">MouseEvent</span><span style="FONT-FAMILY: 宋体">。</span></font></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">5</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.graphics</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">此包中包含针对图片、光标、字体或绘图</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体">。比如，可通过</span><span lang="EN-US">Image</span><span style="FONT-FAMILY: 宋体">类调用系统中不同类型的图片文件。</span></p><p class="4" style="TEXT-INDENT: 21pt"><span lang="EN-US">6</span><span style="FONT-FAMILY: 楷体_GB2312">、</span><span lang="EN-US">org.eclipse.swt.ole.win32</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">对不同平台，</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">有一些针对性的</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体">。例如，在</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">平台，可以通过此包很容易的调用</span><span lang="EN-US">OLE</span><span style="FONT-FAMILY: 宋体">组件，这使得</span><span lang="EN-US">SWT</span><span style="FONT-FAMILY: 宋体">程序也可以内嵌</span><span lang="EN-US">IE</span><span style="FONT-FAMILY: 宋体">浏览器或</span><span lang="EN-US">Word</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Excel</span><span style="FONT-FAMILY: 宋体">等程序。</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">此外还有</span><span lang="EN-US">org.eclipse.swt.dnd</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">org.eclipse.swt.printing</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">org.eclipse.swt.program</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">org.eclipse.swt.accessibility</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">org.eclipse.swt.browser</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">org.eclipse.swt.awt</span><span style="FONT-FAMILY: 宋体">等包，在此不一一介绍了。这些包一般很少用到，只需要稍微了解一下就行了，不必深究。<br /><br /><span style="FONT-FAMILY: 黑体"><strong>用</strong></span><span lang="EN-US"><strong>SWT Designer</strong><br /></span><br /><span lang="EN-US">   SWT Designer</span><span style="FONT-FAMILY: 宋体">是优秀的</span><span lang="EN-US">SWT/JFace</span><span style="FONT-FAMILY: 宋体">开发辅助工具<br /></span><a href="http://downloads.instantiations.com/Designer/release/v5.1.0_20060908125203/Designer_v5.1.0_win32_x86.exe">http://downloads.instantiations.com/Designer/release/v5.1.0_20060908125203/Designer_v5.1.0_win32_x86.exe</a><br /><a href="http://www.codefocus.cn/code/JAVA/SWT_Designer5.rar">http://www.codefocus.cn/code/JAVA/SWT_Designer5.rar</a><br /><u><font color="#800080">codefocus.cn解压</font></u><br /></span></p><p class="MsoNormal"><span lang="EN-US">   SWT Designer</span><span style="FONT-FAMILY: 宋体">还无法完成所有的界面设计工作，所以在界面开发中依然是以手工写代码为主，而且手写代码某些时候比界面拖拉操作更快捷。以下是笔者在使用</span><span lang="EN-US">SWT Designer</span><span style="FONT-FAMILY: 宋体">开发界面时的基本流程：</span></p><p class="a1"><span lang="EN-US" style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT-FAMILY: " times="" new="" roman?;="" font-style:="" font-variant:="" font-weight:="" font-size:="" 7pt;="" line-height:="" normal;="" font-size-adjust:="" none;="" font-stretch:="" normal;?="">           </span></span><span style="FONT-FAMILY: 宋体">新开一个临时的</span><span lang="EN-US">Application</span><span style="FONT-FAMILY: 宋体">文件，用</span><span lang="EN-US">SWT Desiger</span><span style="FONT-FAMILY: 宋体">快速做好开发所需要的部份界面。</span></p><p class="a1"><span lang="EN-US" style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT-FAMILY: " times="" new="" roman?;="" font-style:="" font-variant:="" font-weight:="" font-size:="" 7pt;="" line-height:="" normal;="" font-size-adjust:="" none;="" font-stretch:="" normal;?="">           </span></span><span style="FONT-FAMILY: 宋体">将自动生成的代码移植到正式项目中，进行手工修改和代码精简。</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体">另外，由于</span><span lang="EN-US">SWT Designer</span><span style="FONT-FAMILY: 宋体">不是很稳定，所以在使用时还应注意：</span></p><p class="a1"><span lang="EN-US" style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT-FAMILY: " times="" new="" roman?;="" font-style:="" font-variant:="" font-weight:="" font-size:="" 7pt;="" line-height:="" normal;="" font-size-adjust:="" none;="" font-stretch:="" normal;?="">           </span></span><span style="FONT-FAMILY: 宋体">不要在界面中加入太多组件。</span></p><p class="a1"><span lang="EN-US" style="FONT-SIZE: 7.5pt; FONT-FAMILY: Wingdings">l<span style="FONT-FAMILY: " times="" new="" roman?;="" font-style:="" font-variant:="" font-weight:="" font-size:="" 7pt;="" line-height:="" normal;="" font-size-adjust:="" none;="" font-stretch:="" normal;?="">           </span></span><span style="FONT-FAMILY: 宋体">不要频繁的移动组件，或者删除又添加组件，否则很可能因为内存耗尽而死机。</span></p></span></span>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/78124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-10-30 18:18 <a href="http://www.blogjava.net/hengheng123456789/articles/78124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT的来源（转）</title><link>http://www.blogjava.net/hengheng123456789/articles/78098.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Mon, 30 Oct 2006 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/articles/78098.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/78098.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/articles/78098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/78098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/78098.html</trackback:ping><description><![CDATA[       要想弄清楚为什么一切都被弄得如此混乱，要从几年前只存在AWT的时候说起。SUN当时已经建立了一套基本的可移植控件类，这些类映射到不同操作系统上的原生窗口组件（native widget），显然下一步应该继续增强这套模型，除了初始的CUA 92组件（文字、按钮等等），再继续加上表格、树、记事本、滑块等等……当时的AWT还满是漏洞，远不能称为可靠，还需要SUN的coder们去修补。SUN的developer们如Graham和Otto总是习惯于公开把他们的bug归咎为操作系统的差异，比如“Windows和OS/2的焦点次序不同”或者“在……之间Ctrl-X的行为不一样”，以及其他苍白的托辞，好让批评的火力从SUN太早释出代码这个问题的真相上移开。然后Amy Fowler来到了SUN。不是我大男子主义，Amy是个聪明的美女，大多数呆头呆脑只懂技术的开发人员都要被她捏在手里。<br /><br />        Amy来自一家Smalltalk公司，叫做Objectshare，在那里她负责搞UI类库。跟Java相比Smalltalk的历史有些悲惨，曾几何时有3家庞大的Smalltalk公司——IBM、Parc-Place和Digitalk。在90年代初期3家公司的市场份额大致相等，生活是美好的。Parc-Place采用仿窗口部件（emulated widgets）的设计（即Swing的设计），IBM和Digitalk则采用原生窗口部件（native widgets）。后来IBM压倒了另外两家，因此他们打算合并成一家，假设叫做Parc-Place Digitalk。随后当他们试图将他们的产品融合到一个叫做Jigsaw的计划中时爆发了一场大战，计划由于政治原因失败了（开发人员实际上已经能让它运转起来），就因为原生和仿造两派的死战。Amy赢得了精神上的胜利，不过在IBM我们赢得了他们所有的生意，因为这两家公司在一整年里除了吵架什么都没做。当尘埃落定之后PPD（Parc-Place Digitalk当时已改名为Objectshare，跟Windscale改名为Sellafield的原因相同——让人们淡忘之前发生的灾难）的股票价格从60美元掉到了低于1美元1股。他们因为伪报收入被NASDAQ摘牌，从此消失。此时SUN正走上与PPD类似的技术方向，于是PDD的技术人员都把他们的简历投到了SUN。Amy被雇佣了，她承诺通过轻量级方案解决所有窗口组件的问题，因此说服SUN管理层让她当了GUI开发部门的头头。她是拿着“这里原来的人都搞砸了，我是来解决的”的钥匙进来的。随后Amy雇佣了所有她过去在Parc-Place的旧朋友，让他们来开发Swing。<br /><br />        显然Swing应该做的是仅仅成为一个绘制框架，给那些希望创建地图软件或者绘图软件的人们使用，无论如何，应该围绕AWT类库来建造它，按钮之类的东西仍然交给AWT来管。SUN的人比如Philip和Mark已经让AWT能够处理表格、树和记事本（notebook，？），所以Swing的方向应该说很明显了。但那些毁了PDD的人不干，他们非要把一切都弄成轻量级的。由于SUN管理层的无知，再加上Amy无情的政治手段，造成了我们今天所见的混乱局面。Amy还使SUN相信Swing是作为Mozilla项目的一部分与Netscape联合开发的，事实上这只是她的宣传伎俩。<br /><br />        在IBM，我们从第一天起就憎恶Swing。庞大、满是错误，而且难看至极。原先我们的工具如VisualAge for Java都是用Smalltalk（用的是原生窗口组件）写的，所以当我们将这些工具向Java代码库迁移时，我们需要一套窗口组件。IBM这边的开发人员都是原来搞Smalltalk的那一批人，我们对管理层要求用Swing来构建WebSphere Studio工具都非常不情愿。Swing是个可怕的充满缺陷的怪兽。在WebSphere Studio最初的预览中，当与Microsoft Visual Studio作对比演示的时候，我们所有的客户都讨厌它，就因为它的外观，而不管它的功能有多强。大多数消费者都不会买一辆让人觉得难看的车，哪怕这车有一台出色的引擎。因此我们开始了一个项目，是把我们的Smalltalk原生窗口组件移植到Java上去。这个项目是加拿大的Object Technology International小组做的。这个项目获得了成功，被运用在在我们发布的VisualAge Micro Edition产品中，VisualAge Micro Edition后来成为J2ME开发方面一个非常成功的IDE。但是OTI的人发现，Swing在读取Windows事件方面有极严重的缺陷，我们甚至无法进行SWT（S开始是Simple的缩写，不过后来变成了Standard的缩写）和Swing间的互操作。他们在读事件队列的时候用了一种可能留下内存漏洞的方式，所以我们不得不采用我们自己的查询Windows事件队列的循环，以纠正这个错误。我们试了一次又一次让SUN修复这个错误，但Amy就是听不进去，所以我们才决定SWT和AWT/Swing不能共存。我们甚至在SWT中定义了自己的Point和Rectangle类——整个工具包对AWT或Swing都没有任何依赖。我们把这个工具包放到了Eclipse中，这是一个工具平台，它的总体设计目标就是要战胜Micrsoft和Visual Studio。Eclipse是开源的，所以任何人都可以在上面构建自己的东西，我们已经有像TogetherSoft和Rational这样的公司移植到了上面。我们的竞争者是Microsoft，所以我们所有努力和注意力都是从正面针对Microsoft。<br /><br />        不管怎么说SUN对此非常不满。他们的Netbeans跟Eclipse做的是相同的事，因此他们向IBM高层抱怨。他们认为SWT是要将你绑到Windows上，这纯粹是胡说，因为SWT能通过GTK在Mac/Linux上运行，以及一大堆嵌入式平台。他们拒绝让Eclipse获得Java认证，因为里面有原生代码，所以Eclipse产品必须很小心地使用单词“Java”这个SUN的商标。Eclipse甚至不能把自己称为一个Java IDE，SUN已经威胁过要采取法律行动来制止IBM在任何时候把Eclipse称作一个Java IDE。结果之一就是IBM在Eclipse上创建的GUI设计工具，允许你构建Swing/AWT GUI，却不让你往里面拖放SWT窗口控件。<br /><br />        将SWT从Eclipse中分离出来是完全可能的，只需要把DLL抠出来放到路径中，并使用窗口组件工具包来给你的银行或者保险或者其他什么应用程序开发GUI。再次说明，我们无法更进一步，因为SUN把我们的双手绑上了。虽然作为Eclipse开放源码协议的一部分，CPL允许我们提供这样的解决方案，但SUN已经很清楚地表明他们不希望我们这样做。<br /><br />        对于用户社区来说，无论IBM和SUN的最终动机是什么，我发现有一点总是很有趣：喜爱Swing的人总会说“一旦你花上几年时间去掌握它，你就能正确地使用它”，这基本上是他们在试图证明和维护他们辛苦得来的用途有限的专门技术；而SWT的拥护者们说的是“哇，这真快，这跟原生的一样，还可以用XP皮肤……它还又轻又小”。有一句话是我喜欢的，我们的一个用户说，Swing就像Java决定不通过操作系统来实现原生的IO，而是通过磁头马达API自己来读磁盘的扇区。Swing基本上就是这样的，它拿着个底层的“paint(Graphics)”方法，自己来绘制所有的窗口组件。<img src ="http://www.blogjava.net/hengheng123456789/aggbug/78098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2006-10-30 17:25 <a href="http://www.blogjava.net/hengheng123456789/articles/78098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>