打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java JFace之TreeViewer

QQ列表就是一颗树形结构。

本例有三层结构:国家--->地区-->人物。

package com.hwadee.pojo;

import java.util.List;

public interface Node {   //节点接口 ,让每一个类实现接口
 public String getName();
 public void setName(String name);
 public void setChildren(List list);
 public List getChildren();
}

package com.hwadee.pojo;

import java.util.List;

public class Person implements Node{
 private int id;
 private String name;
 public Person(){
  
 }
 public Person(int id,String name){
  this.id = id;
  this.name = name;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @Override
 public List getChildren() {  //Person没有子集
  return null;
 }
 @Override
 public void setChildren(List list) { //Person没有子集
  
 }
}


package com.hwadee.pojo;

import java.util.List;

public class City implements Node{
 private int id; //城市ID
 private String name;  //城市名字
 private List<Person> persons;  //城市中的人,装在一个集合中
 
 public City(){
  
 }
 public City(int id,String name){
  this.id = id;
  this.name = name;
 }
 @Override
 public List<Person> getChildren() {
  return persons;
 }
 @Override
 public String getName() {
  return name;
 }
 @Override
 public void setChildren(List list) {
  this.persons = list;
 }
 @Override
 public void setName(String name) {
  this.name = name;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
}


package com.hwadee.pojo;

import java.util.List;

public class Country implements Node{
 private int id;
 private String name;
 private List<City> citys;
 public Country(){
  
 }
 public Country(int id,String name){
  this.id = id;
  this.name = name;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @Override
 public List<City> getChildren() {
  return citys;
 }
 @Override
 public void setChildren(List list) {
  this.citys = list;
 }
}

package com.hwadee.tree;
import org.eclipse.swt.SWT;
public class TestTree extends Shell {
 /**
  * Launch the application.
  * @param args
  */
 public static void main(String args[]) {
  try {
   Display display = Display.getDefault();
   TestTree shell = new TestTree(display);
   shell.open();
   shell.layout();
   while (!shell.isDisposed()) {
    if (!display.readAndDispatch()) {
     display.sleep();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
  * Create the shell.
  * @param display
  */
 public TestTree(Display display) {
  super(display, SWT.SHELL_TRIM);
  
  TreeViewer treeViewer = new TreeViewer(this, SWT.BORDER);
  Tree tree = treeViewer.getTree();
  tree.setBounds(10, 34, 217, 262);
  
  ListViewer listViewer = new ListViewer(this, SWT.BORDER | SWT.V_SCROLL);
  List list = listViewer.getList();
  list.setBounds(247, 34, 198, 262);
  
  Label lblTreeviewer = new Label(this, SWT.NONE);
  lblTreeviewer.setBounds(73, 10, 61, 17);
  lblTreeviewer.setText("TreeViewer");
  
  Label lblListviewer = new Label(this, SWT.NONE);
  lblListviewer.setBounds(318, 10, 61, 17);
  lblListviewer.setText("ListViewer");
  
  treeViewer.setLabelProvider(new MyLabelProvider());     //提供LabelProvider
  treeViewer.setContentProvider(new MyContentProvider());  //提供contentProvider
  treeViewer.setInput(new Factory().createData());   //导入数据
  createContents();
 }
 /**
  * Create contents of the shell.
  */
 protected void createContents() {
  setText("SWT Application");
  setSize(484, 344);
 }
 @Override
 protected void checkSubclass() {
  // Disable the check that prevents subclassing of SWT components
 }
}


 

package com.hwadee.labelprovider;

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

import com.hwadee.pojo.Node;

public class MyLabelProvider extends LabelProvider {  //标签器
 @Override
 public String getText(Object element) {
  return ((Node)element).getName();
 }
 @Override
 public Image getImage(Object element) {
  return null;
 }
}

package com.hwadee.contentprovider;

import java.util.List; 

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

import com.hwadee.pojo.Node;

public class MyContentProvider implements ITreeContentProvider{   //内容器

 @Override
 public Object[] getChildren(Object arg0) {
  Node node = (Node)arg0;
  if(node.getChildren()==null || node.getChildren().isEmpty()){
   return new Object[0];
  }
  else{
   return node.getChildren().toArray();
  }
 }

 @Override
 public Object getParent(Object arg0) {
  return null;
 }

 @Override
 public boolean hasChildren(Object arg0) {
   Node node = (Node)arg0;
   if(node.getChildren()==null || node.getChildren().isEmpty()){
    return false;
   }
   else{
    return true;
   }
 }
 @Override
 public Object[] getElements(Object arg0) {
  if(arg0 instanceof List){
   return ((List)arg0).toArray();
  }
  return new Object[0];
 }
 @Override
 public void dispose() {
 }
 @Override
 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
 }
 
}

package com.hwadee.service;

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

import com.hwadee.pojo.City;
import com.hwadee.pojo.Country;
import com.hwadee.pojo.Person;

public class Factory {     //获取数据
 public List createData(){
  
  Person p1 = new Person(1,"叶开");
  Person p2 = new Person(2,"傅红雪");
  Person p3 = new Person(3,"明月心");
  Person p4 = new Person(4,"南宫翎");
  City c1 = new City(1,"云南");
  City c2 = new City(2,"安徽");
  Country country = new Country(1,"中国");

  List<Person> list1 = new ArrayList<Person>();
  list1.add(p1);
  list1.add(p2);
  c1.setChildren(list1);
  
  List<Person> list2 = new ArrayList<Person>();
  list2.add(p3);
  list2.add(p4);
  c2.setChildren(list2);
  
  List<City> list3 = new ArrayList<City>();
  list3.add(c1);
  list3.add(c2);
  country.setChildren(list3);
  
  List<Country> list4 = new ArrayList<Country>();
  
  list4.add(country);
  return list4;
 }
}

效果图:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
记录和恢复ListView滚动的位置
Android从菜鸟到笨鸟:ViewPager+Handler实现广告栏无限循环
使用Spring Data Redis操作Redis(二)
Android之OkHttp详解(非原创)
Android开发之WebView中捕获JavaScript事件
C# 流写入类StreamWriter的基本介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服