TreeViewer与XML

package com.client.swt;

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.IStructuredSelection;<pre name="code" class="java">package com.client.swt;

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

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

@SuppressWarnings("rawtypes")
public class MyTreeContentProvider implements ITreeContentProvider{

	@Override
	public Object[] getElements(Object elment) {
		return getChildren(elment);
	}

	@Override
	public void dispose() {
		
	}

	@Override
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		System.out.println("111");
	}

	@SuppressWarnings("unchecked")
	@Override
	public Object[] getChildren(Object parentElement) {
		//判断父节点是否是XML中的界定
		if(parentElement instanceof Element){
			Element els = (Element) parentElement;
						List datas = null;
			if(els.elements().size() > 0){
				datas = els.elements();
			}else{
				datas = new ArrayList();
				datas.add(els);
			}
			return datas.toArray();
		}else if(parentElement instanceof List){
			return ((List)parentElement).toArray();
		}
		return new Object[0];
	}

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

	@Override
	public boolean hasChildren(Object element) {
		if(element instanceof Element){
			Element el = (Element) element;
			if(el.elements().size() > 0){
				return true;
			}
		}
		return false;
	}

}

package com.client.swt;

import org.dom4j.Element;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;

public class MyTableLabelProvider implements ITableLabelProvider{

	@Override
	public void addListener(ILabelProviderListener arg0) {
		
	}

	@Override
	public void dispose() {
		
	}

	@Override
	public boolean isLabelProperty(Object arg0, String arg1) {
		return false;
	}

	@Override
	public void removeListener(ILabelProviderListener arg0) {
		
	}

	@Override
	public Image getColumnImage(Object arg0, int arg1) {
		return null;
	}

	@Override
	public String getColumnText(Object element, int columnIndex) {
		Element el = (Element) element;
		switch (columnIndex) {
		case 0:
			return el.getName();
		case 1:
			String value = "";
			if(el.elements().size() == 0){
				value = el.getText();
			}
			return value;
		default:
			return "";
		}
	}

}

package com.client.swt;

import org.dom4j.Element;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.swt.widgets.TreeItem;

public class DefaultVariableCellModifier implements ICellModifier{

	@Override
	public boolean canModify(Object element, String property) {
		return true;
	}

	@Override
	public Object getValue(Object element, String property) {
		System.out.println("element Object:"+element);
		try {
			if("name".equals(property)){
				Element elName =(Element) element;
				System.out.println("elName:"+elName.getName());
				return elName.getName();
			}else if("value".equals(property)){
				Element el =(Element) element;
				if(el.elements().size() == 0){
					System.out.println("value:"+ el.getText());
					return el.getText();
				}else{
					return "";
				}
			}else{
				return "";
			}
		} catch (Exception e) {
			TreeItem el =(TreeItem) element;
			String val = el.getText();
			System.out.println("val:"+val);
			return val;
		}
	}

	@Override
	public void modify(Object oldelement, String property, Object newelement) {
		try {
			Object oldEl = getValue(oldelement,property);
			if(!oldEl.toString().equals(newelement.toString())){
				TreeItem el = (TreeItem) newelement;
				el.setText(newelement.toString());
			}
		} catch (Exception e) {
		}
		
	}

}
package com.client.swt;

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeColumn;

public class MyXmlTreeEditor {

	final Display display = new Display();
	final Shell shell = new Shell(display, SWT.MAX | SWT.CLOSE);
	final TreeViewer viewer = new TreeViewer(shell,SWT.FULL_SELECTION);
	
	public static void main(String[] args) {
		try {
			String filePath = "D:\\workspace_study\\myTestProject\\src\\com\\client\\swt\\test.xml";
			SAXReader reader = new SAXReader();
			Document doc = reader.read(new File(filePath));
			new MyXmlTreeEditor().run(doc);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	public void run(Document doc){
		
		
		shell.setLayout(new FillLayout());
		shell.setText("XML_TREE");
		viewer.getTree().setHeaderVisible(true);
		
		TreeColumn column = new TreeColumn(viewer.getTree(), SWT.LEFT);
		column.setText("name");
		column.setWidth(200);
		column = new TreeColumn(viewer.getTree(), SWT.LEFT);
		column.setText("value");
		column.setWidth(200);
		
		viewer.setColumnProperties(new String[]{"name","value"});
		CellEditor[] cellEditor = new CellEditor[2];
		cellEditor[0] = new TextCellEditor(viewer.getTree());
		cellEditor[1] = new TextCellEditor(viewer.getTree());
		viewer.setCellEditors(cellEditor);
		viewer.setCellModifier(new DefaultVariableCellModifier());
		
		//右键编辑
		Menu menu = new Menu(viewer.getTree());
		MenuItem newItem = new MenuItem(menu,SWT.NONE);
		newItem.setText("新增");
		newItem.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent event) {
				IStructuredSelection selection= (IStructuredSelection) viewer.getSelection();
				Element el = (Element) selection.getFirstElement();
				Element chileEl = el.addElement("AddElement");
				viewer.add(el, chileEl);
				System.out.println("选中增加");
			}
		});
		MenuItem deleteItem = new MenuItem(menu,SWT.NONE);
		deleteItem.setText("删除");
		deleteItem.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent event) {
				IStructuredSelection selection= (IStructuredSelection) viewer.getSelection();
				Element el = (Element) selection.getFirstElement();
				Element elParent = el.getParent();
				elParent.remove(el);
				viewer.refresh();
				System.out.println("选中删除");
			}
		});
		viewer.getTree().setMenu(menu);
		
		viewer.setContentProvider(new MyTreeContentProvider());
		viewer.setLabelProvider(new MyTableLabelProvider());
		
		try {
			Element rootEl = doc.getRootElement();
			viewer.setInput(rootEl);
		} catch (Exception e) {
			e.printStackTrace();
		}
		shell.open();
		while (!shell.isDisposed())
			if (display.readAndDispatch())
				display.sleep();
		display.dispose();
	}
	
}

<?xml version="1.0" encoding="UTF-8"?>
<reply>
	<data>
		<student>
			<studentInfo>
				<stuId>001</stuId>
				<stuName>zhangsan</stuName>
				<stuSex>nan</stuSex>
				<stuAge>20</stuAge>
				<stuClass>3-1</stuClass>
			</studentInfo>
		</student>
	</data>
</reply>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值