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>