DANCE WITH JAVA

          開(kāi)發(fā)出高質(zhì)量的系統(tǒng)

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          好友之家

          最新評(píng)論

          Swt/Jface treeViewer的使用

          上邊介紹了,tableviewer,這里介紹一下treeViewer,總的流程類似。
          一、構(gòu)造一個(gè)樹(shù)形結(jié)構(gòu)的數(shù)據(jù)出來(lái),這里選擇國(guó)家、城市、人來(lái)構(gòu)造一個(gè)樹(shù)形結(jié)構(gòu),代碼如下:
          1,定義一個(gè)接口

          package model;

          import java.util.List;

          public interface Itree {
              
          public String getName();
              
          public void setName(String name);
              
          public void setChildren(List Children);
              
          public List getChildren();
          }

          2,國(guó)家

          package model;

          import java.util.ArrayList;
          import java.util.List;

          public class Country implements Itree{
              
          private Long id;
              
          private String name;
              
          private List children = new ArrayList();
              
          public Country(){
              }

              
          public Country(String name){
                  
          this.name = name;
              }

              
          public List getChildren() {
                  
          return children;
              }

              
          public void setChildren(List children) {
                  
          this.children = children;
              }

              
          public Long getId() {
                  
          return id;
              }

              
          public void setId(Long id) {
                  
          this.id = id;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          }


          3,城市
          package model;

          import java.util.ArrayList;
          import java.util.List;

          public class City implements Itree{
              
          private Long id;
              
          private String name;
              
          private List children = new ArrayList();
              
          public City(){
              }

              
          public City(String name){
                  
          this.name = name;
              }

              
          public List getChildren() {
                  
          return children;
              }

              
          public void setChildren(List children) {
                  
          this.children = children;
              }

              
          public Long getId() {
                  
          return id;
              }

              
          public void setId(Long id) {
                  
          this.id = id;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

          }


          4,人
          package model;

          import java.util.ArrayList;
          import java.util.List;

          public class People implements Itree{
              
          private Long id;
              
          private String name;
              
          public People(){
              }

              
          public People(String name){
                  
          this.name = name;
              }

              
          public List getChildren() {
                  
          return null;
              }

              
          public void setChildren(List children) {
              }

              
          public Long getId() {
                  
          return id;
              }

              
          public void setId(Long id) {
                  
          this.id = id;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

          }


          5,把這些元素組織起來(lái)
          package model;

          import java.util.ArrayList;
          import java.util.List;

          public class Factory {
              @SuppressWarnings(
          "unchecked")
              
          public static List createTree(){
                  
          //生成國(guó)家
                  Country cn = new Country("中國(guó)");
                  Country us 
          = new Country("美國(guó)");
                  Country jp 
          = new Country("日本");
                  
          //生成城市
                  City beijing  = new City("北京");
                  City shanghai 
          = new City("上海");
                  City newyork 
          = new City("紐約");
                  City la 
          = new City("洛杉磯");
                  City tokyo 
          = new City("東京");
                  City osaka 
          = new City("大阪");
                  
          //北京人
                  ArrayList list = new ArrayList();
                  list.add(
          new People("張三"));
                  list.add(
          new People("李四"));
                  list.add(
          new People("王五"));
                  beijing.setChildren(list);
                  
          //上海人
                  list = new ArrayList();
                  list.add(
          new People("翠花"));
                  list.add(
          new People("小紅"));
                  list.add(
          new People("小崔"));
                  shanghai.setChildren(list);
                  
          //紐約人
                  list = new ArrayList();
                  list.add(
          new People("tom"));
                  list.add(
          new People("rose"));
                  list.add(
          new People("john"));
                  newyork.setChildren(list);
                  
          //洛杉磯人
                  list = new ArrayList();
                  list.add(
          new People("Sofia"));
                  list.add(
          new People("sarah"));
                  list.add(
          new People("Jennifer"));
                  la.setChildren(list);
                  
          //東京人
                  list = new ArrayList();
                  list.add(
          new People("渡邊"));
                  list.add(
          new People("鬼冢"));
                  list.add(
          new People("山本"));
                  tokyo.setChildren(list);
                  
          //大阪人
                  list = new ArrayList();
                  list.add(
          new People("奈奈子"));
                  list.add(
          new People("菜菜子"));
                  list.add(
          new People("新垣結(jié)衣"));
                  osaka.setChildren(list);
                  
                  
          //關(guān)聯(lián)城市與國(guó)家
                  
          //中國(guó)
                  ArrayList citys = new ArrayList();
                  citys.add(beijing);
                  citys.add(shanghai);
                  cn.setChildren(citys);
                  
          //美國(guó)
                  citys = new ArrayList();
                  citys.add(newyork);
                  citys.add(la);
                  us.setChildren(citys);
                  
          //日本
                  citys = new ArrayList();
                  citys.add(tokyo);
                  citys.add(osaka);
                  jp.setChildren(citys);
                  
          //國(guó)家列表
                  ArrayList countrys = new ArrayList();
                  countrys.add(cn);
                  countrys.add(us);
                  countrys.add(jp);
                  
          return countrys;
              }

          }


          二、定義內(nèi)容器和標(biāo)簽器
          1,內(nèi)容器
          import java.util.List;

          import model.Itree;

          import org.eclipse.jface.viewers.IStructuredContentProvider;
          import org.eclipse.jface.viewers.ITreeContentProvider;
          import org.eclipse.jface.viewers.Viewer;

          public class TreeContentProvider implements IStructuredContentProvider, ITreeContentProvider {
                  
                  
          public Object[] getElements(Object inputElement) {
                      
          if (inputElement instanceof List){
                          List input 
          = (List)inputElement;
                          
          return input.toArray();
                      }

                      
          return new Object[0];
                  }

                  
          public Object[] getChildren(Object parentElement) {
                      Itree node 
          = (Itree)parentElement;
                      List list 
          = node.getChildren();
                      
          if(list == null){
                          
          return new Object[0];
                      }

                      
          return list.toArray();
                  }

                  
                  
          public boolean hasChildren(Object element) {
                      Itree node 
          = (Itree)element;
                      List list 
          = node.getChildren();
                      
          return !(list == null || list.isEmpty());
                  }

                  
          //以下三個(gè)函數(shù)根據(jù)需要填充
                  public Object getParent(Object element) {
                      
          return null;
                  }

                  
          public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
                  }

                  
          public void dispose() {
                  }

              }
          2,標(biāo)簽器:
          import model.Itree;

          import org.eclipse.jface.viewers.ILabelProvider;
          import org.eclipse.jface.viewers.LabelProvider;
          import org.eclipse.swt.graphics.Image;

          public class TreeLabelProvider extends LabelProvider implements ILabelProvider {
                  
          public String getText(Object element) {
                      Itree node 
          = (Itree)element;
                      
          return node.getName();
                  }

                  
          public Image getImage(Object element) {
                      
          return null;
                  }

              }
          三、好了,準(zhǔn)備工作做好了,把上邊的內(nèi)容利用起來(lái)就好了。
          import model.Factory;

          import org.eclipse.jface.viewers.TreeViewer;
          import org.eclipse.swt.SWT;
          import org.eclipse.swt.layout.FillLayout;
          import org.eclipse.swt.widgets.Display;
          import org.eclipse.swt.widgets.Shell;
          import org.eclipse.swt.widgets.Tree;


          public class TestTreeViewer {
              
              
          private static Tree tree;
              
          public static void main(String[] args) {
                  
          final Display display = Display.getDefault();
                  
          final Shell shell = new Shell();
                  shell.setSize(
          500375);
                  shell.setText(
          "SWT Application");
                  
          //
                  final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
                  tree 
          = treeViewer.getTree();
                  tree.setBounds(
          8375264185);
                  
                  treeViewer.setLabelProvider(
          new TreeLabelProvider());
                  treeViewer.setContentProvider(
          new TreeContentProvider());
                  treeViewer.setInput(Factory.createTree());
                  
                  shell.open();
                  shell.setLayout(
          new FillLayout());
                  shell.layout();
                  
          while (!shell.isDisposed()) {
                      
          if (!display.readAndDispatch())
                          display.sleep();
                  }

              }


          }


          看看是不是已經(jīng)實(shí)現(xiàn)了treeViewer
          四、上邊是簡(jiǎn)單的treeViewer,如果我們需要帶checkbox的treeViewer,簡(jiǎn)單,只需要更改
          final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
          把TreeViewer換成CheckboxTreeViewer。這就是mvc的好處了。
          但現(xiàn)實(shí)中我們多用ContainerCheckedTreeViewer代替CheckboxTreeViewer,因?yàn)檫@個(gè)提供了更多的功能。
          CheckboxTreeViewer是TreeViewer的子類,  ContainerCheckedTreeViewer是CheckboxTreeViewer的子類,所以可以隨便替換。
          替換后:
          final ContainerCheckedTreeViewer treeViewer = new ContainerCheckedTreeViewer(shell, SWT.BORDER|SWT.H_SCROLL);
          五、treeviewer和tableviewer都介紹過(guò)了,考慮一下把兩個(gè)結(jié)合起來(lái)是不是我們經(jīng)常需要的情況。嘗試一下吧。
          六、souce下載:http://www.aygfsteel.com/Files/dreamstone/jface-6.rar

          posted on 2007-08-05 15:20 dreamstone 閱讀(9122) 評(píng)論(3)  編輯  收藏 所屬分類: SWT和插件開(kāi)發(fā)

          評(píng)論

          # re: Swt/Jface treeViewer的使用 2008-05-20 18:52 求助

          我的表是id parid name
          怎么實(shí)現(xiàn)樹(shù)狀啊。大哥快幫我啊。  回復(fù)  更多評(píng)論   

          # re: Swt/Jface treeViewer的使用 2008-05-20 18:53 求助

          luiguangshui@163.com  回復(fù)  更多評(píng)論   

          # re: Swt/Jface treeViewer的使用 2010-10-01 19:41 de

          best example I have ever found im Internet  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 白玉县| 大同县| 兰坪| 宜州市| 文山县| 上栗县| 太谷县| 岚皋县| 青铜峡市| 登封市| 衡山县| 彭阳县| 康平县| 正镶白旗| 志丹县| 晋中市| 克拉玛依市| 前郭尔| 德化县| 九龙县| 九龙坡区| 甘洛县| 荣成市| 玉环县| 镇坪县| 桃江县| 进贤县| 科技| 昆明市| 兴城市| 雅江县| 甘孜| 长葛市| 略阳县| 务川| 榆树市| 建瓯市| 城口县| 纳雍县| 永清县| 瓦房店市|