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;
}
}
效果图:
联系客服