📄 domtree.09
字号:
import java.awt.*;import javax.swing.*;import javax.swing.tree.TreePath;import javax.swing.event.TreeModelListener;import javax.swing.tree.TreeModel;import javax.swing.tree.TreeCellRenderer;import org.w3c.dom.Document;import org.w3c.dom.DocumentType;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.ProcessingInstruction;//加载xerces的DOM分析器import org.apache.xerces.parsers.DOMParser;/** * <CODE>DOMTreeView</CODE>会读入一个XML文件, * 使用DOM分析器分析后,将它显示到一个Java的JTree里。 * * @author <a href="mailto:james@eknow.com.tw">王景浩</a> * @version 0.9 */public class DOMTreeView extends JFrame{ public JTree tree; /** * 设置窗口的初始值 */ public void display(){ try { //将tree加到窗口里,同时设置在窗口的中间。 this.getContentPane().add(tree, BorderLayout.CENTER); //设置窗口大小 this.setSize(new Dimension(400, 300)); //显示窗口 this.show(); } catch(Exception e) { e.printStackTrace(); } } /** * 设置窗口关闭的事件 */ protected void processWindowEvent(java.awt.event.WindowEvent e) { super.processWindowEvent(e); if (e.getID() == java.awt.event.WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public void parse(String uri){ //建立一个 DOM 分析器 DOMParser parser = new DOMParser(); try{ //显示标题 this.setTitle("目前文件: " + uri); parser.setFeature( "http://xml.org/sax/features/validation", true); parser.setFeature( "http://apache.org/xml/features/dom/include-ignorable-whitespace", false); parser.parse(uri); Document doc = parser.getDocument(); //建立使用MyTreeModel的tree tree = new JTree(new MyTreeModel(doc)); //将tree的CellRenderer设置为MyTreeCellRenderer tree.setCellRenderer(new MyTreeCellRenderer()); } catch (Exception e){ System.err.println("分析错误: " + e.getMessage()); } } public static void main(String[] args) { if( args.length != 1) { System.out.println("使用方法: java DOMTreeView [XML文件名称]"); return; } String uri = args[0]; DOMTreeView dtv = new DOMTreeView(); dtv.parse(uri); dtv.display(); }}class MyTreeModel implements TreeModel { private Document root; public MyTreeModel(Document doc){ root = doc; } public Object getRoot() { return root; } public Object getChild(Object parent, int index) { return ((Node)parent).getChildNodes().item(index); } public int getChildCount(Object parent) { return ((Node)parent).getChildNodes().getLength(); } public boolean isLeaf(Object node) { return ((Node)node).getChildNodes().getLength() == 0; } public void valueForPathChanged(TreePath path, Object newValue) { } public int getIndexOfChild(Object parent, Object child) { NodeList nl = ((Node)parent).getChildNodes(); for(int i=0; i< nl.getLength(); i++) if( ((Node)child).equals(nl.item(i)) ) return i; return -1; } public void addTreeModelListener(TreeModelListener l) { } public void removeTreeModelListener(TreeModelListener l) { }}class MyTreeCellRenderer extends JLabel implements TreeCellRenderer{ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Node node = (Node)value; switch( node.getNodeType() ){ case Node.CDATA_SECTION_NODE: case Node.COMMENT_NODE: case Node.TEXT_NODE: this.setText( node.getNodeName() + " \"" + node.getNodeValue() + "\" " ); break; case Node.ELEMENT_NODE: NamedNodeMap nodeMap = node.getAttributes(); StringBuffer strElement = new StringBuffer(); strElement.append( "<" + node.getNodeName() ); for(int i=0; i< nodeMap.getLength(); i++) strElement.append(" " + nodeMap.item(i).getNodeName() + "=\"" + nodeMap.item(i).getNodeValue() + "\""); this.setText(strElement.toString()); break; case Node.DOCUMENT_NODE: this.setText( node.getNodeName() ); break; case Node.DOCUMENT_TYPE_NODE: DocumentType dt = (DocumentType)node; this.setText( dt.getName() + " " + "System ID: " + dt.getSystemId() + ", " + "Public ID: " + dt.getPublicId() + " " ); break; case Node.PROCESSING_INSTRUCTION_NODE: ProcessingInstruction pi = (ProcessingInstruction)node; this.setText( "Target=(" + pi.getTarget() + "), " + "Data=(" + pi.getData() + ")" ); break; case Node.ENTITY_REFERENCE_NODE: this.setText( "&" + node.getNodeName() + ";"); break; default: this.setText( node.getNodeType() + " <" + node.getNodeName() + "> \"" + node.getNodeValue() + "\" " ); } return this; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -