[java]代码库
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package yan.t1;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.tree.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
/**
* XmlJTree class
* @author Ibrabel
*/
public final class XmlJTree extends JTree{
DefaultTreeModel dtModel=null;
/**
* XmlJTree constructor
* @param filePath
*/
public XmlJTree(String filePath){
if(filePath!=null)
setPath(filePath);
}
public void setPath(String filePath){
Node root = null;
/*
Parse the xml file
*/
try {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(filePath);
root = (Node) doc.getDocumentElement();
} catch (IOException | ParserConfigurationException | SAXException ex) {
JOptionPane.showMessageDialog(null,"Can't parse file",
"Error", JOptionPane.ERROR_MESSAGE);
return;
}
/*
if any result set the appropriate model to the jTree
*/
if(root!=null){
dtModel= new DefaultTreeModel(builtTreeNode(root));
this.setModel(dtModel);
}
}
/**
* fullTreeNode Method
* construct the full jTree from any xml file
* this method is recursive
* @param root
* @return DefaultMutableTreeNode
*/
private DefaultMutableTreeNode builtTreeNode(Node root){
DefaultMutableTreeNode dmtNode;
dmtNode = new DefaultMutableTreeNode(root.getNodeName());
NodeList nodeList = root.getChildNodes();
for (int count = 0; count < nodeList.getLength(); count++) {
Node tempNode = nodeList.item(count);
// make sure it's element node.
if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
if (tempNode.hasChildNodes()) {
// loop again if has child nodes
dmtNode.add(builtTreeNode(tempNode));
}
}
}
return dmtNode;
}
public static void main(String[] args) {
/*
Create simple frame for the example
*/
JFrame myFrame = new JFrame();
myFrame.setTitle("XmlJTreeExample");
myFrame.setSize(300, 500);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setLocationRelativeTo(null);
JPanel pan = new JPanel(new GridLayout(1, 1));
/*
Add jTree
*/
final XmlJTree myTree = new XmlJTree(null);
myFrame.add(new JScrollPane(myTree));
/*
Add a button to choose the file
*/
JButton button = new JButton("Choose file");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"XML file", "xml");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
myTree.setPath(chooser.getSelectedFile().getAbsolutePath());
}
}
});
pan.add(button);
/*
Add the JPanel to the JFrame and set the JFrame visible
*/
myFrame.add(pan,BorderLayout.SOUTH);
myFrame.setVisible(true);
}
}
初级程序员
by: yan 发表于:2017-12-26 12:31:22 顶(0) | 踩(0) 回复
test
回复评论