发布此文章供我学习
此为checkboxTreeViewer树,Column代表了需要设置的表格头的名称
双击部分是解析xml文件内容所写
public void createVisual(Composite visual) {
composite = new Composite(visual, SWT.None);
composite.setLayout(new FillLayout());
treeViewer = new CheckboxTreeViewer(composite, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION);
// 开启头线表格线头
treeView = treeViewer.getTree();
treeView.setHeaderVisible(true);
TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
TreeColumn trclmnNewColumn = treeViewerColumn.getColumn();
trclmnNewColumn.setWidth(300);
trclmnNewColumn.setText("name");
TreeViewerColumn treeViewerColumn_1 = new TreeViewerColumn(treeViewer, SWT.NONE);
TreeColumn trclmnNewColumn_1 = treeViewerColumn_1.getColumn();
trclmnNewColumn_1.setWidth(300);
trclmnNewColumn_1.setText("data");
TreeViewerColumn treeViewerColumn_2 = new TreeViewerColumn(treeViewer, SWT.NONE);
TreeColumn trclmnNewColumn_2 = treeViewerColumn_2.getColumn();
trclmnNewColumn_2.setWidth(100);
trclmnNewColumn_2.setText("type");
treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setLabelProvider(new TreeLabelProvider());
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
ArrayList<Byte> list = new ArrayList<>();
TreeSelection selection = (TreeSelection) event.getSelection();
DefaultElement firstElement = (DefaultElement) selection.getFirstElement();
// Element firstElement = (Element) selection.getFirstElement();
// 获得当前点击行的所有属性
List<Attribute> attributes = firstElement.attributes();
for (Attribute attribute : attributes) {
// System.out.println(attribute);
String value = attribute.getValue();
byte[] bytes = value.getBytes();
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
list.add(b);
}
// System.out.println(value);
}
publishData("Cmd", list);
}
});
}
解析xml文件放入内容器与标签器中
//内容器
public class TreeContentProvider implements ITreeContentProvider {
// 由此方法决定树的第一级结点显示哪些对象
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof File) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read((File) inputElement);
Element rootElement = document.getRootElement();
ArrayList<Object> list = new ArrayList<>();
list.add(rootElement);
return list.toArray();
} catch (DocumentException e) {
e.printStackTrace();
}
}
return new Object[0];
}
// 当界面中单击某节时,由此方法决定被单击结点应该显示哪些子节点
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Element) {
// 解析出里面的文件对象列表
Element els = (Element) parentElement;
List<Element> datas = null;
if (els.elements().size() > 0) {
datas = els.elements();
} else {
datas = new ArrayList<Element>();
datas.add(els);
}
return datas.toArray();
} else if (parentElement instanceof List) {
return ((List<?>) parentElement).toArray();
}
return new Object[0];
}
@Override
public Object getParent(Object element) {
return null;
}
// 判断参数结点是否有子节点 返回true表示element有子节点
@Override
public boolean hasChildren(Object element) {
if (element instanceof Element) {
Element el = (Element) element;
if (el.elements().size() > 0) {
return true;
}
}
return false;
}
}
//标签器
public class TreeLabelProvider implements ITableLabelProvider {
@Override
public void addListener(ILabelProviderListener listener) {
}
@Override
public void dispose() {
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
Element el = (Element) element;
switch (columnIndex) {
case 0:
return el.attributeValue("name");
case 1:
String value = "";
value = el.attributeValue("data");
return value;
case 2:
String value2 = "";
value2 = el.attributeValue("type");
return value2;
default:
return "";
}
}
}