Hi,
I need for a help ..I don't know how to add an
element to the xml file, delete from the file or
edite name of any element..I'm using JBuilder..as
you know that dealing with it is so hard!
this is my code
package fina;
import java.awt.*;
import
javax.swing.*;
import javax.swing.tree.*;
import
javax.swing.event.*;
import java.util.Iterator;
import
java.util.List;
import org.jdom.*;
import
org.jdom.input.SAXBuilder;
import java.io.File;
import
java.awt.event.*;
import
javax.swing.event.TreeSelectionEvent;
import
javax.swing.tree.DefaultMutableTreeNode;
public class XMLTreeViewer extends
JFrame
implements TreeSelectionListener {
//The JTree to display the XML
private
JTree xmlTree;
//The XML document to be output to the
JTree
private Document xmlDoc;
DefaultMutableTreeNode
tn;
JButton AddButton = new
JButton();
JTextField TextField = new
JTextField();
JTextArea TextArea = new
JTextArea();
public XMLTreeViewer(Document doc) {
super();
//
WindowUtilities.setNativeLookAndFeel();
addWindowListener(new ExitListener());
this.xmlDoc =
doc;
setSize(600, 450);
tn = new
DefaultMutableTreeNode("XML");
initialize();
}
private void initialize() {
xmlTree =
new JTree();
xmlTree.setEditable(true);
AddButton.setBackground(SystemColor.inactiveCaptionText);
AddButton.setForeground(Color.black);
AddButton.setText("ADD");
AddButton.addMouseListener(new java.awt.event.MouseAdapter()
{
public void
mouseClicked(MouseEvent e)
{
AddButton_mouseClicked(e);
}
});
TextField.setText("");
TextArea.setText("jTextArea1");
getContentPane().add(new JScrollPane(xmlTree),
BorderLayout.CENTER);
this.getContentPane().add(TextField,
BorderLayout.NORTH);
this.getContentPane().add(AddButton,
BorderLayout.SOUTH);
this.getContentPane().add(TextArea, BorderLayout.EAST);
processElement(xmlDoc.getRootElement(), tn);
(
(DefaultTreeModel) xmlTree.getModel()).setRoot(tn);
addWindowListener(new java.awt.event.WindowAdapter()
{
public void
windowClosing(java.awt.event.WindowEvent e)
{
//release all the
resource
xmlTree =
null;
tn =
null;
}
});
setVisible(true);
//add Listener to Print to Screen the xml
tag selected\
xmlTree.addTreeSelectionListener(this);
}
public void valueChanged(TreeSelectionEvent evt)
{
// Get all nodes whose selection
status has changed
TreePath[]
paths = evt.getPaths();
//
Print the last Path Component
selected
System.out.println(evt.getPath().getLastPathComponent());
//print the full path from the selected
tag
System.out.println(evt.getPath().toString());
}
private void processElement(Element el,
DefaultMutableTreeNode dmtn) {
DefaultMutableTreeNode
currentNode =
new
DefaultMutableTreeNode(el.getName());
String text =
el.getTextNormalize();
if ( (text != null) &&
(!text.equals(""))) {
currentNode.add(new
DefaultMutableTreeNode(text));
}
Iterator children =
el.getChildren().iterator();
while
(children.hasNext()) {
processElement(
(Element) children.next(), currentNode);
}
dmtn.add(currentNode);
}
public static void main(String[]
args)throws Exception {
SAXBuilder builder = new
SAXBuilder();
Document doc =
builder.build("comp.xml");
XMLTreeViewer
viewer = new XMLTreeViewer(doc);
viewer.addWindowListener(new java.awt.event.WindowAdapter()
{
public void
windowClosing(java.awt.event.WindowEvent
e)
{System.exit(0);}
});
}
void
AddButton_mouseClicked(MouseEvent e)
{
TextArea.setSize(20,20);
TextArea.setText("An
element will be\n added..");
TextField.getText();
Object
o=xmlTree.getLastSelectedPathComponent();
addObject(o);
// String
s=xmlTree.getLastSelectedPathComponent().toString();
}
public void addObject(Object child)
{
DefaultMutableTreeNode
parentNode=null;
TreePath
parentPath=xmlTree.getSelectionPath();
if(parentPath!=null){
parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent());
addObject(parentNode, child, true);
}
}
public void
addObject(DefaultMutableTreeNode parentNode, Object
child,
boolean b) {
}
}
//---------------------------------------
package fina;
import javax.swing.*;
import
java.awt.*;
public class WindowUtilities {
/** Tell system to use native look and
feel, as in previous
* releases. Metal
(Java) LAF is the default otherwise.
*/
public static void setNativeLookAndFeel()
{
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
System.out.println("Error setting native LAF: " +
e);
}
}
public static void setJavaLookAndFeel()
{
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch(Exception e) {
System.out.println("Error setting Java LAF: " +
e);
}
}
public static void
setMotifLookAndFeel() {
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
} catch(Exception e) {
System.out.println("Error setting Motif LAF: " +
e);
}
}
/** A simplified way to see a JPanel or
other Container.
* Pops up a JFrame with
specified Container as the content pane.
*/
public static JFrame
openInJFrame(Container
content,
int
width,
int
height,
String
title,
Color bgColor) {
JFrame frame = new
JFrame(title);
frame.setBackground(bgColor);
content.setBackground(bgColor);
frame.setSize(width, height);
frame.setContentPane(content);
frame.addWindowListener(new
ExitListener());
frame.setVisible(true);
return(frame);
}
/** Uses Color.white as the background
color. */
public static JFrame
openInJFrame(Container
content,
int
width,
int
height,
String title) {
return(openInJFrame(content, width, height, title,
Color.white));
}
/** Uses Color.white as the background
color, and the
* name of the Container's
class as the JFrame title.
*/
public static JFrame
openInJFrame(Container
content,
int
width,
int height) {
return(openInJFrame(content,
width,
height,
content.getClass().getName(),
Color.white));
}
}
//----------------------------------------
package fina;
import java.awt.*;
import
java.awt.event.*;
/** A listener that you attach to the top-level
Frame or JFrame of
* your application, so
quitting the frame exits the application.
*
1998-99 Marty Hall,
http://www.apl.jhu.edu/~hall/java/ */
public class ExitListener extends WindowAdapter
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
}
thank you ..
Bassam