亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用JFace和SWT構建簡單的應用程序(2)

2019-11-18 13:03:35
字體:
來源:轉載
供稿:網友

  實現頂級 EXPlorer 類
  我們將采用 Hello, World 程序,更改其名稱,然后用 createContents() 方法創建 TreeViewer(而不是創建一個按鈕),將其內容提供程序設置為我們的文件樹內容提供程序,然后將輸入設置到某個文件夾。在這個例子中,我選擇的文件夾是 C: 驅動器中的頂級文件夾。
  
  注:需要從 createContents() 返回 SWT 窗口構件。正如前面提到的,JFace Tree Viewer 不是 SWT 窗口構件,因此我們不能將它返回。我們需要從樹查看器獲取真正的窗口構件。我們通過使用 getTree() 做到這一點。我們的主窗口類現在看起來與下面相似:
  
  清單 5. Explorer(版本 1)
  
  import java.io.*;
  import org.eclipse.jface.viewers.*;
  import org.eclipse.jface.window.*;
  import org.eclipse.swt.*;
  import org.eclipse.swt.widgets.*;
  public class Explorer extends applicationWindow
  {
  public Explorer()
  {
  super(null);
  }
  PRotected Control createContents(Composite parent)
  {
  TreeViewer tv = new TreeViewer(parent);
  tv.setContentProvider(new FileTreeContentProvider());
  tv.setInput(new File("C://"));
  return tv.getTree();
  }
  public static void main(String[] args)
  {
  Explorer w = new Explorer();
  w.setBlockOnOpen(true);
  w.open();
  Display.getCurrent().dispose();
  }
  }
  
  運行該程序,您將看到與圖 8 相似的結果。
  
 用JFace和SWT構建簡單的應用程序(2)(圖一)

  
圖 8. Explorer(版本 1)

  
  除了樣板文件代碼,我們只需向 Hello, World 程序添加 9 行代碼就可做到這一點。正如您可能猜想的那樣,程序用 File 的 toString() 方法來顯示這些文件,這不是我們真正想要的。要改變這一點,我們需要提供一個標簽提供程序。
  
  實現標簽提供程序
  正如有一個內容提供程序對象可用來獲取樹節點的子元素一樣,當需要實際顯示這些節點時,樹查看器有另一個助手對象:標簽提供程序。和前面一樣,我們需要設置它:
  
  public void setLabelProvider(IBaseLabelProvider labelProvider)
  
  而且需要實現下面的方法以返回要為每個元素顯示的文本:
  
  public String getText(Object element)
  
  假如我們將標簽提供程序添加到樹查看器圖中,就會得到圖 9。
  
 用JFace和SWT構建簡單的應用程序(2)(圖二)

  
圖 9. 顯示內容提供程序和標簽提供程序的樹查看器

  
  我們可以實現接口 ILabelProvider,但將缺省實現 LabelProvider 子類化更輕易(假如沒有顯式地設置標簽提供程序,則使用的就是這個類)。我們希望利用 getText() 做的事是返回文件名最后的部分 — 相對文件名而非 toString() 缺省使用的絕對文件名。圖 6 演示了代碼。
  
  圖 6. FileTreeLabelProvider(版本 1)
  
  import java.io.*;
  import org.eclipse.jface.viewers.*;
  public class FileTreeLabelProvider extends LabelProvider
  {
  public String getText(Object element)
  {
  return ((File) element).getName();
  }
  }
  
  而且我們必須記得使樹查看器使用這個標簽提供程序,如清單 7 所示。
  
  清單 7. Explorer(版本 2)
  
  import java.io.*;
  import org.eclipse.jface.viewers.*;
  import org.eclipse.jface.window.*;
  import org.eclipse.swt.*;
  import org.eclipse.swt.widgets.*;
  public class Explorer extends ApplicationWindow
  {
  public Explorer()
  {
  super(null);
  }
  protected Control createContents(Composite parent)
  {
  TreeViewer tv = new TreeViewer(parent);
  tv.setContentProvider(new FileTreeContentProvider());
  tv.setLabelProvider(new FileTreeLabelProvider());
  tv.setInput(new File("C://"));
  return tv.getTree();
  }
  public static void main(String[] args)
  {
  Explorer w = new Explorer();
  w.setBlockOnOpen(true);
  w.open();
  Display.getCurrent().dispose();
  }
  }
  
  這一次運行該程序時,我們會獲得更清楚的視覺效果,如圖 10 所示。
  
 用JFace和SWT構建簡單的應用程序(2)(圖三)

  
圖 10. Explorer(版本 2)

  
  我們現在要做的是將樹查看器移到左邊,將一個表查看器放在右邊,以顯示在樹查看器中已選中的文件夾中的文件列表。
  
  使用表查看器
  為了處理表,JFace 有一個 TableViewer。和 TreeViewer 一樣,它有輸入(根對象)、內容提供程序和標簽提供程序。它比樹查看器簡單,因為它不需要處理樹。圖 11 演示了內容提供程序和標簽提供程序。
  
 用JFace和SWT構建簡單的應用程序(2)(圖四)

  
圖 11. 顯示內容提供程序和標簽提供程序的表查看器

  設置輸入對象的方法與前面相同:
  
  TableViewer: void setInput(Object rootElement)
  
  實現文件表查看器內容提供程序
  讓我們考慮內容提供程序。這一次,根元素比樹查看器根元素簡單。表查看器僅僅期望根對象有許多子元素,因此要實現的唯一有趣方法是獲取子元素的方法:
  
  public Object[] getElements(Object rootElement)
  
  要實現的接口是 IStrUCturedContentProvider。
  
  根對象是一個文件夾;其子元素是該文件夾包含的文件/文件夾。因此我們的文件表內容提供程序類與清單 8 類似。
  
  清單 8. FileTableContentProvider(版本 1)
  
  import java.io.*;
  import org.eclipse.jface.viewers.*;
  public class FileTableContentProvider implements IStructuredContentProvider
  {
  public Object[] getElements(Object element)
  {
  Object[] kids = null;
  kids = ((File) element).listFiles();
  return kids == null ? new Object[0] : kids;
  }
  public void dispose()
  {
  }
  public void inputChanged(Viewer viewer, Object old_object, Object new_object)
  {
  }
  }
  
  因此我們現在有兩個查看器:樹查看器和表查看器。為了將它們相鄰地安置在一起,我們創建了 SWT SashForm 窗口構件。該窗口構件用一個用戶可以調節的邊框分隔其子元素。然后,我們將樹和表添加到框格表單(sash form)(圖 12)。
  
 用JFace和SWT構建簡單的應用程序(2)(圖五)

  
圖 12. 包含樹查看器和表查看器的框格表單

  
  接下來要做的是使表查看器查看用戶在樹查看器中選中的每個文件夾。要做到這一點,我們必須偵聽事件。
  
  偵聽事件
  當用戶在樹查看器中選中一項時,樹查看器發出 SelectionChangedEvent 事件。我們需要偵聽該事件,當發出該事件時,需要將表的輸入設置為樹查看器中當前選中的文件。為了偵聽來自樹查看器的選擇更改事件,我們使用下面的方法:
  
  public void addSelectionChangedListener
  (ISelectionChangedListener listener)
  
  當用戶選中/取消選中樹查看器中的節點時,用下面的方法調用選擇更改偵聽器:
  
  public void selectionChanged(SelectionChangedEvent event)
  
  為了實現該偵聽器類,我們將在主資源治理器窗口中編碼一個匿名類。在 selectionChanged() 方法中,我們將需要獲得剛選中的對象,并使其成為表查看器的輸入。將所有的工作組合在一起,就得到了清單 9。
  
  清單 9. Explorer(版本 3)
  
  import java.io.*;
  import org.eclipse.jface.viewers.*;
  import org.eclipse.jface.window.*;
  import org.eclipse.swt.*;
  import org.eclipse.swt.custom.*;
  import org.eclipse.swt.widgets.*;
  public class Explorer extends ApplicationWindow
  {
  public Explorer()
  {
  super(null);
  }
  protected Control createContents(Composite parent)
  {
  SashForm sash_form = new SashForm(parent, SWT.HORIZONTAL SWT.NULL);
  TreeViewer tv = new TreeViewer(sash_form);
  tv.setContentProvider(new FileTreeContentProvider());
  tv.setLabelProvider(new FileTreeLabelProvider());
  tv.setInput(new File("C://"));
  final TableViewer tbv = new TableViewer(sash_form, SWT.BORDER);
  tbv.setContentProvider(new FileTableContentProvider());
  tv.addSelectionChangedListener(new ISelectionChangedListener()
  {
  public void selectionChanged(SelectionChangedEvent event)
  {
  IStructuredSelection selection =
  (IStructuredSelection) event.getSelection();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久91| 亚洲精品99久久久久| 国产香蕉一区二区三区在线视频| 国产精品欧美亚洲777777| 国产精品午夜一区二区欲梦| 久久夜精品va视频免费观看| 91久久久久久国产精品| 国产精品嫩草影院一区二区| 色综合色综合久久综合频道88| 欧美国产视频一区二区| 日韩精品中文字幕在线播放| 日韩免费在线视频| 中文字幕久久精品| 国产精品盗摄久久久| 在线精品播放av| 26uuu亚洲国产精品| 另类图片亚洲另类| 欧美极品美女电影一区| 亚洲久久久久久久久久| 成人网在线观看| 亚洲欧美成人网| 最近2019中文字幕大全第二页| 国产精品久久久久久一区二区| 欧美日韩中文字幕| 国产精品女主播视频| 国产噜噜噜噜噜久久久久久久久| 国产精品aaaa| 亚洲第一区中文字幕| 国产精品成人免费视频| 欧美在线一区二区三区四| 超碰97人人做人人爱少妇| 久久在线视频在线| 欧美激情精品久久久久久免费印度| 中文字幕精品视频| 日韩免费在线播放| 亚洲男人av在线| 中文字幕国产亚洲| 成人精品一区二区三区| 国产成人精品久久二区二区91| www.欧美三级电影.com| 精品视频一区在线视频| 国产一区二区三区高清在线观看| 国产精品久久中文| 欧美极品在线视频| 尤物yw午夜国产精品视频明星| 国产成人在线亚洲欧美| 久久综合亚洲社区| 欧美激情视频免费观看| 亚洲国产精品嫩草影院久久| 亚洲国产精品资源| 日韩欧美高清视频| 91精品久久久久久久久久| 久久久电影免费观看完整版| 久久久99免费视频| 中文字幕av一区二区三区谷原希美| 国产aⅴ夜夜欢一区二区三区| 亚洲精品欧美日韩专区| 欧美日韩国产一区中文午夜| 亚洲免费一级电影| yellow中文字幕久久| 亚洲男人天堂古典| 18久久久久久| 精品夜色国产国偷在线| 国产精品永久免费视频| 国产精品日本精品| 精品亚洲精品福利线在观看| 欧美视频在线观看 亚洲欧| 精品亚洲一区二区三区| 欧美一级片免费在线| 欧美专区第一页| 亚洲免费视频网站| 国产午夜一区二区| 91豆花精品一区| 成人性生交大片免费观看嘿嘿视频| 久久影院资源网| 成人免费大片黄在线播放| 国产成人av在线| 欧美老女人性生活| 亚洲天堂av综合网| 亚洲大胆美女视频| 日韩精品在线播放| 一区二区欧美久久| 亚洲精品97久久| 国产主播精品在线| 亚洲人成在线观| 日韩免费黄色av| 久久69精品久久久久久国产越南| 欧美日韩中文字幕综合视频| 国产丝袜一区二区三区免费视频| 日韩黄色高清视频| 色妞一区二区三区| 国产欧美最新羞羞视频在线观看| 91av在线国产| 91精品在线观看视频| 欧美日韩精品二区| 国产精品久久久久久久久久99| 中文日韩在线视频| 亚洲精品成人久久久| 91sa在线看| 最近中文字幕mv在线一区二区三区四区| 日韩av手机在线看| 国产成人精品免费久久久久| 亚洲欧美日韩精品久久亚洲区| 精品国产视频在线| 国产免费亚洲高清| 日韩成人在线免费观看| 亚洲自拍偷拍一区| 亚洲第一免费播放区| 欧美黑人一级爽快片淫片高清| 成人国产亚洲精品a区天堂华泰| 久久天天躁狠狠躁夜夜躁2014| 羞羞色国产精品| 日本免费在线精品| 国产精品男女猛烈高潮激情| 国产日韩精品电影| 日韩三级影视基地| 久久久精品免费| 欧美成人午夜激情视频| 亚洲欧美日韩国产成人| 亚洲美女在线观看| 丝袜情趣国产精品| 亚洲国产精品美女| 国产精品中文在线| 成人情趣片在线观看免费| 日韩av三级在线观看| 国产精品中文字幕在线观看| 亚洲精品国产品国语在线| 日韩欧美在线一区| 国产精品成久久久久三级| 国产精品丝袜一区二区三区| 精品人伦一区二区三区蜜桃网站| 992tv成人免费视频| 久久久久久久影视| 成人福利在线观看| 97精品国产91久久久久久| 日本aⅴ大伊香蕉精品视频| 亚洲free性xxxx护士白浆| 欧美二区在线播放| 国模gogo一区二区大胆私拍| 国产久一一精品| 成人在线小视频| 在线亚洲国产精品网| 国产精品久久久91| 亚洲伊人久久大香线蕉av| 日韩一区av在线| 亚洲精品视频二区| 欧美激情一区二区三区在线视频观看| 亚洲视频自拍偷拍| 91精品国产免费久久久久久| 亚洲va国产va天堂va久久| 欧美精品一区二区免费| 亚洲综合一区二区不卡| 国产精品爱久久久久久久| 国内精品久久久久久久久| 亚洲欧美日韩高清| 日韩精品在线免费观看视频| 亚洲天堂影视av| 9.1国产丝袜在线观看| 国产成人精品亚洲精品| 国产日韩在线看片| 在线丨暗呦小u女国产精品| 欧洲永久精品大片ww免费漫画| 国产欧美日韩免费看aⅴ视频| 91美女高潮出水|