SWT中利用Treeview来显示XML文件

最近一个项目需要在SWT界面上来对xml文件进行显示,但找了一下发现网上对在swing上显示有很多DEMO,但SWT这里却没有找到合适的,于是自动动手丰衣足食,下面我们来用 treeview来对XML文件进行显示,不多说,直接上代码,主要是标签管理器和内容管理器的:


1.标签管理器中主要取出当前节点的所有参数集合显示:

/**

*标签管理

*/

new LabelProvider() {

public String getText(Object element) {
if(element instanceof Node){
//获取当前XML 节点中的参数集合map
NamedNodeMap map = ((Node)element).getAttributes();
if(map == null) return "" ;
int length = map.getLength();
//取得该节点的名称
String str = ((Node)element).getNodeName() + " " ;
//循环取出所有的参数 包含名称和值
for(int j = 0 ; j < length ; j++) {

String values = map.item(j).getNodeName() + " =\"" + map.item(j).getFirstChild().getNodeValue() + "\"";

str += values + " ";
}
return str;
}

return "";
}
}


2.内容管理器 主要是取出来当前节点的字节点和判断是否该XML节点包含有字节点


/**
* 内容管理器
*/
new ITreeContentProvider() {

@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}

@Override
public void dispose() {
// TODO Auto-generated method stub

}

@Override
public boolean hasChildren(Object element) {

if(element instanceof Node) {
Node node = (Node)element;
if(node.hasChildNodes())
return true;
}

return false;
}

@Override
public Object getParent(Object element) {
// TODO Auto-generated method stub
return null;
}


@Override
public Object[] getElements(Object inputElement) {
System.out.println("########");
return getChildren(inputElement);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public Object[] getChildren(Object parentElement) {
//判断父节点是否为 XML中节点
if(parentElement instanceof Node )
{
Node nodes = (Node)parentElement;

List datas = new ArrayList();

if (nodes != null) {
//从第一个字节点开始遍历所有子节点,并且压入集合中
for (Node n = nodes.getFirstChild(); n != null; n = n
.getNextSibling()) {

if(n != null && n.getNodeType() == Node.ELEMENT_NODE)

datas.add(n);
}
return datas.toArray();
}

//如果为集合 则直接返回集合
}else if(parentElement instanceof List) {
return ((List)parentElement).toArray();
}
//
return new Object[0];
}
}


3. treeview的input,初始化给传入xml文件中最高层的节点或同级最高的节点集合,直接上代码:


//设置input
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
FileInputStream input = null;
try {
builder = factory.newDocumentBuilder();
input = new FileInputStream(new File(path)); // path就是要解析的xml文件路径
Document doc = builder.parse(input);

//自动打开2级节点
viewer.setAutoExpandLevel(2);
viewer.setInput(doc.getChildNodes());
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(input != null)
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


好了 到此我们就告一段落,不知道怎么去插图,所以放了DEMO到附件中,包含有实例文件等,直接import到eclipse即可,试试吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值