JFace - TreeViewer

1) TreeNode
/**
* It's used by TreeViewer
* TreeNode root = new TreeNode("Root");
* treeViewer = new TreeViewer(container, SWT.BORDER);
* treeViewer.setLabelProvider(new TreeLableProvider());
* treeViewer.setContentProvider(new TreeContentProvider());
* treeViewer.setInput(root);
*
* The root node has no parent
*
* @author Louis
*/
public class TreeNode {
//Root has no parent
public TreeNode parent;

public String name;
public List<TreeNode> chidren = new ArrayList<TreeNode>();

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

public TreeNode(String name, TreeNode parent) {
this.name = name;
this.parent = parent;

if (parent != null)
parent.chidren.add(this);
}

public TreeNode(String name, TreeNode parent, List<TreeNode> children) {
this.name = name;
this.parent = parent;
this.chidren = children;

if (parent != null)
parent.chidren.add(this);
}

public void addChild(String childName) {
new TreeNode(childName, this);
}

public TreeNode getParent() {
return parent;
}

public void setParent(TreeNode parent) {
this.parent = parent;
}

public void setChidren(List<TreeNode> chidren) {
this.chidren = chidren;
}

public TreeNode getChildNode(String nodeName) {
return getChild(this, nodeName);
}

public List<TreeNode> getChidren() {
return chidren;
}

public TreeNode getChild(String nodeName) {
for (TreeNode child : chidren) {
if (child.name.equals(nodeName)) {
return child;
}
}

return null;
}

public TreeNode getChild(TreeNode parent, String nodeName) {
for (TreeNode child : parent.chidren) {
if (child.name.equals(nodeName)) {
return child;
}
}

return null;
}

public boolean hasChild() {
return this.chidren.size() > 0;
}

public String getName() {
return name;
}

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

public String toString() {
return name == null ? "" : name;
}

public int hashCode() {
return (name == null) ? 0 : name.hashCode();
}
}


2) TreeLableProvider, TreeContentProvider

public class TreeLableProvider extends LabelProvider {
@Override
public String getText(Object element) {
if (element instanceof TreeNode)
return ((TreeNode) element).name;
else
return super.getText(element);
}
}

public class TreeContentProvider implements ITreeContentProvider {
//1)
public Object[] getElements(Object inputElement) {
Object[] elements = null;
if (inputElement instanceof TreeNode) {
TreeNode c = (TreeNode) inputElement;
elements = c.chidren.toArray();
} else
elements = new Object[0];

return elements;
}

//2) If has children, show +, click it to expand node
public boolean hasChildren(Object element) {
boolean hasChildren = false;

if (element instanceof TreeNode) {
TreeNode c = (TreeNode) element;
hasChildren = c.chidren.size() > 0;
}

return hasChildren;
}

//3) Click + to get children from this method
public Object[] getChildren(Object parentElement) {
Object[] children = null;

if (parentElement instanceof TreeNode) {
TreeNode c = (TreeNode) parentElement;
children = c.chidren.toArray();
} else
children = new Object[0];

return children;
}

public Object getParent(Object element) {
return null;
}

public void dispose() {
}

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


3) Create TreeViewer

//Must has a hidden root node, it's invisible, as ancestor of all other nodes
private TreeNode root = new TreeNode("Root");

private void createTreeViewer(Composite container) {
treeViewer = new TreeViewer(container, SWT.BORDER);
treeViewer.setLabelProvider(new TreeLableProvider());
treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setInput(root);

tree = treeViewer.getTree();
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
}


4) Add init data

private void initData() {
root.getChidren().clear();

//Level 1 Node - China
TreeNode china = new TreeNode("China", root);
//Level 2 Node - Guangdong
TreeNode guangDong = new TreeNode("Guang Dong", china);
guangDong.addChild("Zhu Hai");
guangDong.addChild("Shen Zhen");

//Level 2 Node - Fujian
TreeNode fuJian = new TreeNode("Fu Jian", china);
fuJian.addChild("Xia Men");
fuJian.addChild("San Ming");
new TreeNode("Fu Zhou", fuJian);

//Level 1 - US
TreeNode us = new TreeNode("US", root);
TreeNode newYork = new TreeNode("New York", us);
newYork.addChild("Beacon");
newYork.addChild("Glen Cove");
new TreeNode("Rome", newYork);

us.addChild("Los Angeles");
new TreeNode("Pittsburgh", us);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值