import java.awt.*; import javax.swing.*; import javax.swing.tree.*; import java.awt.event.*; import java.io.*; import org.jdom.input.*; import org.jdom.output.*; import org.jdom.*; public class TreePanel extends JFrame { JMenuBar jMenuBar1 = new JMenuBar(); JMenu fileMenu = new JMenu(); JMenuItem openItem = new JMenuItem(); JMenuItem saveItem = new JMenuItem(); JMenu editMenu = new JMenu(); JMenuItem insertItem = new JMenuItem(); JMenuItem deleteItem = new JMenuItem(); JMenuItem exitItem = new JMenuItem(); JTree tree = new JTree(); TrdDOMTreeModel model = null; JFileChooser fileChooser = new JFileChooser(); public TreePanel() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { openItem.setText("Open"); openItem.setMnemonic('O'); openItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { openItem_actionPerformed(e); } }); fileMenu.setMnemonic('F'); fileMenu.setText("File"); saveItem.setMnemonic('S'); saveItem.setText("Save"); saveItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { saveItem_actionPerformed(e); } }); editMenu.setMnemonic('E'); editMenu.setText("Edit"); insertItem.setMnemonic('I'); insertItem.setText("Insert"); insertItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { insertItem_actionPerformed(e); } }); deleteItem.setMnemonic('D'); deleteItem.setText("Delete"); deleteItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { deleteItem_actionPerformed(e); } }); exitItem.setMnemonic('X'); exitItem.setText("Exit"); exitItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(115, java.awt.event.KeyEvent.ALT_MASK, false)); exitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent evt) { System.exit(0); } }); this.setDefaultCloseOperation(3); this.setJMenuBar(jMenuBar1); this.setTitle("Test Frame"); tree.setModel(null); tree.setCellRenderer(new TrdTreeCellRenderer()); fileChooser.setToolTipText(""); jMenuBar1.add(fileMenu); jMenuBar1.add(editMenu); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.addSeparator(); fileMenu.add(exitItem); editMenu.add(insertItem); editMenu.add(deleteItem); this.getContentPane().add(fileChooser, BorderLayout.CENTER); this.getContentPane().add(tree, BorderLayout.CENTER); } /** * */ static public void main(String[] args) { TreePanel panel = new TreePanel(); panel.setSize(300, 300); panel.setVisible(true); } void deleteItem_actionPerformed(ActionEvent e) { TreePath path = tree.getLeadSelectionPath(); if(path == null) return; Object obj = path.getLastPathComponent(); if(obj == null) return; if(obj instanceof Element) { Element element = (Element)obj; model.removeNodeFromParent(element); } } void insertItem_actionPerformed(ActionEvent e) { TreePath path = tree.getLeadSelectionPath(); if(path == null) return; Object obj = path.getLastPathComponent(); if(obj == null) return; if(obj instanceof Element) { InsertDialog dialog = new InsertDialog(this); dialog.setVisible(true); Element element = dialog.getElement(); if(element != null) { this.model.insertNodeInto(element, (Element)obj, 0); } } } void openItem_actionPerformed(ActionEvent e) { int opt = fileChooser.showOpenDialog(this); if(opt == JFileChooser.CANCEL_OPTION) return; File file = fileChooser.getSelectedFile(); if(file == null) return; Document doc = getDocument(file); if(doc == null) return; model = new TrdDOMTreeModel(doc); this.tree.setModel(model); } private Document getDocument(final File file) { try { SAXBuilder builder = new SAXBuilder(); return builder.build(new BufferedInputStream(new FileInputStream(file), 4096)); } catch(Exception ex) { ex.printStackTrace(System.err); } return null; } void saveItem_actionPerformed(ActionEvent e) { try { Document doc = model.getDcoument(); XMLOutputter outputter = new XMLOutputter(); outputter.setIndent(true); outputter.setTrimText(true); outputter.output(doc, new BufferedOutputStream(new FileOutputStream("new.vxml"), 4096)); } catch(Exception ex) { ex.printStackTrace(System.err); } } }