我没写过树型结构但你可以用jdom来分析xml文件,为没一个分支,在你这应该是
<parent4>
<display-name>parent4</display-name>
<onClickEvent>Event4</onClickEvent>
<child7>
<display-name>child7</display-name>
<onClickEvent>child7-Event</onClickEvent>
</child7>
<child8>
<display-name>child8</display-name>
<onClickEvent>child8-Event</onClickEvent>
</child8>
</parent4>设计一个类,等分析完整个xml文件后返回一个数组就可以了,然后根据数组的内容来写树型结构。
下面是我写的一段代码片断
// -----------------------------------------------------------------------------
// JaxpXmlDomExample.java
// -----------------------------------------------------------------------------// Core Java APIs
package com.hhb.mobile.util;import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;// JAXP
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;// DOM
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.NamedNodeMap;/**
* -----------------------------------------------------------------------------
* Used to provide an example of how to build a DOM Tree from an example XML
* file provided on the command line. This example uses Sun Microsystem's JAXP
* API's.
*
* COMPILE:
* --------------------------
* javac JaxpXmlDomExample.java
*
*
* RUN PROGRAM:
* --------------------------
* java JaxpXmlDomExample DatabaseInventory.xml
*
* -----------------------------------------------------------------------------
*/
public class JaxpXmlDomExample { private static void printNode(Node node, String indent) { switch (node.getNodeType()) { case Node.DOCUMENT_NODE:
System.out.println("<xml version=\"1.0\">\n");
// recurse on each child
NodeList nodes = node.getChildNodes();
if (nodes != null) {
for (int i=0; i<nodes.getLength(); i++) {
printNode(nodes.item(i), "");
}
}
break;
case Node.ELEMENT_NODE:
String name = node.getNodeName();
System.out.print(indent + "<" + name);
NamedNodeMap attributes = node.getAttributes();
for (int i=0; i<attributes.getLength(); i++) {
Node current = attributes.item(i);
System.out.print(
" " + current.getNodeName() +
"=\"" + current.getNodeValue() +
"\"");
}
System.out.print(">");
// recurse on each child
NodeList children = node.getChildNodes();
if (children != null) {
for (int i=0; i<children.getLength(); i++) {
printNode(children.item(i), indent + " ");
}
}
System.out.print("</" + name + ">");
break; case Node.TEXT_NODE:
System.out.print(node.getNodeValue());
break;
} } public static void main(String[] args) { if (args.length != 0) {
System.err.println ("\nUsage: java JaxpXmlDomExample filename\n");
System.exit (1);
} // Create File object from incoming file
File xmlFile = new File("configure.xml");
try {
// Get Document Builder Factory
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance(); // Turn on validation, and turn off namespaces
factory.setValidating(true);
factory.setNamespaceAware(false); // Obtain a document builder object
DocumentBuilder builder = factory.newDocumentBuilder(); System.out.println();
// System.out.println("Passed in File : " + args[0]);
System.out.println("Object to Parse (File) : " + xmlFile);
System.out.println("Parser Implementation : " + builder.getClass());
System.out.println(); // Parse the document
Document doc = builder.parse(xmlFile); // Print the document from the DOM tree and feed it an initial
// indentation of nothing
printNode(doc, "");
System.out.println("\n"); } catch (ParserConfigurationException e) {
System.out.println("The underlying parser does not support " +
"the requested features.");
e.printStackTrace();
} catch (FactoryConfigurationError e) {
System.out.println("Error occurred obtaining Document Builder " +
"Factory.");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}}
<parent4>
<display-name>parent4</display-name>
<onClickEvent>Event4</onClickEvent>
<child7>
<display-name>child7</display-name>
<onClickEvent>child7-Event</onClickEvent>
</child7>
<child8>
<display-name>child8</display-name>
<onClickEvent>child8-Event</onClickEvent>
</child8>
</parent4>设计一个类,等分析完整个xml文件后返回一个数组就可以了,然后根据数组的内容来写树型结构。
下面是我写的一段代码片断
// -----------------------------------------------------------------------------
// JaxpXmlDomExample.java
// -----------------------------------------------------------------------------// Core Java APIs
package com.hhb.mobile.util;import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;// JAXP
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;// DOM
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.NamedNodeMap;/**
* -----------------------------------------------------------------------------
* Used to provide an example of how to build a DOM Tree from an example XML
* file provided on the command line. This example uses Sun Microsystem's JAXP
* API's.
*
* COMPILE:
* --------------------------
* javac JaxpXmlDomExample.java
*
*
* RUN PROGRAM:
* --------------------------
* java JaxpXmlDomExample DatabaseInventory.xml
*
* -----------------------------------------------------------------------------
*/
public class JaxpXmlDomExample { private static void printNode(Node node, String indent) { switch (node.getNodeType()) { case Node.DOCUMENT_NODE:
System.out.println("<xml version=\"1.0\">\n");
// recurse on each child
NodeList nodes = node.getChildNodes();
if (nodes != null) {
for (int i=0; i<nodes.getLength(); i++) {
printNode(nodes.item(i), "");
}
}
break;
case Node.ELEMENT_NODE:
String name = node.getNodeName();
System.out.print(indent + "<" + name);
NamedNodeMap attributes = node.getAttributes();
for (int i=0; i<attributes.getLength(); i++) {
Node current = attributes.item(i);
System.out.print(
" " + current.getNodeName() +
"=\"" + current.getNodeValue() +
"\"");
}
System.out.print(">");
// recurse on each child
NodeList children = node.getChildNodes();
if (children != null) {
for (int i=0; i<children.getLength(); i++) {
printNode(children.item(i), indent + " ");
}
}
System.out.print("</" + name + ">");
break; case Node.TEXT_NODE:
System.out.print(node.getNodeValue());
break;
} } public static void main(String[] args) { if (args.length != 0) {
System.err.println ("\nUsage: java JaxpXmlDomExample filename\n");
System.exit (1);
} // Create File object from incoming file
File xmlFile = new File("configure.xml");
try {
// Get Document Builder Factory
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance(); // Turn on validation, and turn off namespaces
factory.setValidating(true);
factory.setNamespaceAware(false); // Obtain a document builder object
DocumentBuilder builder = factory.newDocumentBuilder(); System.out.println();
// System.out.println("Passed in File : " + args[0]);
System.out.println("Object to Parse (File) : " + xmlFile);
System.out.println("Parser Implementation : " + builder.getClass());
System.out.println(); // Parse the document
Document doc = builder.parse(xmlFile); // Print the document from the DOM tree and feed it an initial
// indentation of nothing
printNode(doc, "");
System.out.println("\n"); } catch (ParserConfigurationException e) {
System.out.println("The underlying parser does not support " +
"the requested features.");
e.printStackTrace();
} catch (FactoryConfigurationError e) {
System.out.println("Error occurred obtaining Document Builder " +
"Factory.");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}}
解决方案 »
- 如何手动用Eclipse 搭建SSH2框架 急急急
- hibernate 修改一个字段报错,请大家帮忙
- 关于MyEclipse问题的请教!
- 文件类型转换
- 一个奇怪的tomcat连接数据库的问题 共 30 分
- 请问Delphi数据库编程和.NET的C#网络编程 对以后java学习和应用哪个的帮助大请指教谢谢
- 急需jdbc连接access数据库的驱动程序,谢谢 ̄ 送分100
- 一个关于在JBuilder7的布局问题.小弟在线急等!!!
- 偶需要weblogic6.0 or 6.01sp4,那位高手请告之!
- 简单问题 关于 j2ee---急
- 请问怎样可以把excel文件转变成html里面的<table></table>元素 高分求救!!!!
- 关于Tomcat+Informix数据库链接池问题
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.plaf.metal.MetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.plaf.metal.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class Frame1 extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout(); //Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
} //Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
final int inset = 50;
setBounds ( inset, inset, screenSize.width - inset*2, screenSize.height - inset*2 );
this.setTitle("Frame Title");
first f = new first();
JTree tree = new JTree(f.ReadXml());
JTree tree1 = new JTree(f.ReadXml());
TreeClick tclick = new TreeClick(tree,tree1);
JScrollPane spanel = new JScrollPane(tree);
contentPane.add(new JScrollPane(tree1),BorderLayout.NORTH);
contentPane.add(spanel,BorderLayout.CENTER);
MetalTheme[] themes = { new DefaultMetalTheme(),
new AquaMetalTheme()}; MetalTheme selectedTheme = themes[ new Integer(0).intValue() ];
MetalLookAndFeel.setCurrentTheme(selectedTheme);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout ( new FlowLayout(FlowLayout.RIGHT) );
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("cancel");
}});
buttonPanel.add( cancel );
JButton ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}});
buttonPanel.add( ok );
JButton shuan = new JButton("Bye");
shuan.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("very good");
System.exit(0);
}
});
buttonPanel.add(shuan);
contentPane.add(buttonPanel,BorderLayout.SOUTH); try {
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
} catch (Exception ex) {
System.out.println("Failed loading Metal");
System.out.println(ex);
} } //Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
}
import javax.swing.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class Application1 {
boolean packFrame = false; //Construct the application
public Application1() {
Frame1 frame = new Frame1();
//Validate frames that have preset sizes
//Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setSize(frameSize);
// frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
} //Main method
public static void main(String[] args) {
JDialog.setDefaultLookAndFeelDecorated(true);
JFrame.setDefaultLookAndFeelDecorated(true);
Toolkit.getDefaultToolkit().setDynamicLayout(true);
System.setProperty("sun.awt.noerasebackground","true"); new Application1();
}
}
这只是显示的
//TreeClick tclick = new TreeClick(tree,tree1);
// MetalTheme[] themes = { new DefaultMetalTheme(),new AquaMetalTheme()};是自己定义的还是jdk的类库?
谢谢!
求教:如何在jtree上点击时候出现右键菜单?如何将结果保存到xml文件里面?谢谢!
以下是我的代码:
//AppletTreeimport javax.swing.event.* ;
import java.awt.* ;
import java.applet.* ;
import javax.swing.* ;
import javax.swing.tree.* ;
import java.awt.event.* ;import org.jdom.* ;
import org.jdom.input.* ;
import java.io.* ;
import java.util.* ;import java.awt.* ;
import javax.swing.* ;
import javax.swing.border.* ;
import javax.swing.plaf.* ;
import javax.swing.plaf.basic.* ;
import javax.swing.plaf.metal.* ;import java.io.* ;
import netscape.javascript.* ;public class AppletTree
extends Applet
implements TreeSelectionListener
{
private JTree tree ; private TreePath path ;
private Panel topPanel ;
private DefaultMutableTreeNode top ; private DefaultMutableTreeNode clicknode ; private String link ;
public AppletTree()
{
} public void init()
{
try
{
super.init() ;
this.setLayout(new GridLayout(1, 1)) ;
tree = createTree(new FileInputStream("source/config.xml")) ;
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION) ;
tree.putClientProperty("JTree.lineStyle", "Angled") ; tree.setShowsRootHandles(true) ;
tree.setEditable(false) ;
tree.addTreeSelectionListener(this) ;
IconRender render = new IconRender() ;
tree.setCellRenderer(render) ; topPanel = new Panel(new BorderLayout()) ;
topPanel.add(tree) ;
this.add(topPanel) ;
}
catch (Exception e)
{
e.printStackTrace() ;
} } public JTree createTree(InputStream is)
{
SAXBuilder builder = new SAXBuilder() ;
try
{
Document doc = builder.build(is) ;
Element root = doc.getRootElement() ;
TreeNode rootNode = new TreeNode(root.getAttributeValue("id"), root.getAttributeValue("name"),
root.getAttributeValue("link")) ;
top = new DefaultMutableTreeNode(rootNode) ;
addNode(root, top) ;
}
catch (Exception ex)
{
ex.printStackTrace() ;
}
UIManager.put("Tree.hash", new ColorUIResource(Color.red)) ;
return new JTree(top) ; } /**
*
* @param e 待加入树种的jdom元素
* @param rootNode 树根节点
*/ private void addNode(Element e, DefaultMutableTreeNode rootNode)
{
String id = e.getAttributeValue("id") ;
String name = e.getAttributeValue("name") ;
String link = e.getAttributeValue("link") ;
// 取回属性值
//String val = element.getAttributeValue("value");
//重新设置值
//element.setAttribute("value", val+" haha ");
//删除属性
//element.removeAttribute("value"); TreeNode node = new TreeNode(id, name, link) ;
//如有父节点
Element father = e.getParent() ;
if (father != null)
{
String fid = father.getAttributeValue("id") ;
DefaultMutableTreeNode fatherNode = getTreeNode(fid, rootNode) ;
if (fatherNode != null)
{
fatherNode.add(new DefaultMutableTreeNode(node)) ;
}
}
//如有子节点
Iterator it = e.getChildren().iterator() ;
while (it.hasNext())
{
Element child = (Element) it.next() ;
addNode(child, rootNode) ;
} } /**
* 根据id,查找树节点,//广度优先
* @param id 节点id
* @param rootNode 树根节点
* @return DefaultMutableTreeNode
*/
private DefaultMutableTreeNode getTreeNode(String id, DefaultMutableTreeNode rootNode)
{
DefaultMutableTreeNode returnNode = null ;
if (rootNode != null)
{
Enumeration enum = rootNode.breadthFirstEnumeration() ;
while (enum.hasMoreElements())
{
DefaultMutableTreeNode temp = (DefaultMutableTreeNode) enum.nextElement() ;
TreeNode node = (TreeNode) temp.getUserObject() ;
if (node.getId().equals(id))
{
returnNode = temp ;
break ;
}
}
}
return returnNode ; } public void valueChanged(TreeSelectionEvent event)
{
if (event.getSource() == tree)
{
path = event.getPath() ;
clicknode = (DefaultMutableTreeNode) path.getLastPathComponent() ;
Object uo = clicknode.getUserObject() ;
if (uo instanceof TreeNode)
{
TreeNode nd = (TreeNode) clicknode.getUserObject() ;
link = nd.getLink() ;
}
//调用一个javascript函数;
// JSObject.getWindow (this).eval ("javascript:window.open('"+link+"')") ; }
} public static void main(String[] args)
{
JFrame frame = new JFrame("test") ;
AppletTree tree = new AppletTree() ;
tree.init() ;
frame.getContentPane().add(tree) ;
frame.setSize(600, 600) ; frame.show() ;
}}//IconRender
import javax.swing.* ;
import java.awt.* ;
import javax.swing.tree.* ;import javax.swing.tree.DefaultTreeCellRenderer ;class IconRender
extends DefaultTreeCellRenderer
{//你需要替换成你的icon public static final Icon leafSelectedIcon = new ImageIcon("source/1.gif") ;
public static final Icon leafUnSelectedIcon = new ImageIcon("source/2.gif") ;
public static final Icon folderOpen = new ImageIcon("source/3.gif") ;
public static final Icon folderClose = new ImageIcon("source/4.gif") ;
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus) ; if (leaf && selected)
{
setIcon(IconRender.leafSelectedIcon) ;
}
else if (leaf)
{
setIcon(IconRender.leafUnSelectedIcon) ;
} return this ;
} public IconRender()
{
super() ;
this.setLeafIcon(leafUnSelectedIcon) ;
this.setOpenIcon(folderOpen) ;
this.setClosedIcon(folderClose) ; }}//TreeNode
public class TreeNode
{
private String id ;
private String name ;
private String link ;
public TreeNode(String id, String name, String link)
{
this.id = id ;
this.name = name ;
this.link = link ;
} public String getId()
{
return id ;
} public void setId(String Id)
{
this.id = Id ;
} public void setName(String Name)
{
this.name = Name ;
} public String getName()
{
return name ;
} public String toString()
{
return name ;
} public String getLink()
{
return link ;
} public void setLink(String link)
{
this.link = link ;
}}//config.xml
<?xml version="1.0" encoding="UTF-8"?>
<node name="aaa" id="1" desc="" link="#">
<node name="bbb" id="2" desc="" link="#"/>
<node name="ccc" id="3" desc="" link="#">
<node name="ddd" id="4" desc="" link="#"/>
<node name="eee" id="5" desc="" link="#"/>
<node name="fff" id="6" desc="" link="#"/>
<node name="hhh" id="7" desc="" link="#"/>
</node>
<node name="jjj" id="8" desc="" link="#"/>
<node name="kkk" id="9" desc="" link="#"/>
<node name="lll" id="10" desc="" link="#"/>
</node>