把cs的界面导出成xml文件2 前些日子,我提了一个问题,就是从cs的界面中导出xml文件。现在经过努力,我能够做出一点东西出来。不过没有逃出.net的“控件树”这个概念。代码如下: 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //***** 是一个界面package frame;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class OneFrame extends JFrame{ public static final long serialVersionUID = 0; public OneFrame() { setSize(400, 400);// 设置框架的大小 setTitle("学生管理系统");// 设置框架的标题 setResizable(true); JPanel titlePanel = new TitlePanel(); JPanel midPanel = new MiddlePanel(); Container con = getContentPane(); con.add(titlePanel, BorderLayout.NORTH); con.add(midPanel,BorderLayout.CENTER); } public static void main(String[] args) { OneFrame frame = new OneFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GetFrameXml(frame); frame.setVisible(true); } private static void GetFrameXml(JFrame f) { ReadFrame rf = new ReadFrame(f); System.out.print(rf.GetFrameXml()); System.out.println(rf.GetFrameXmlDoc()); }}class TitlePanel extends JPanel{ public static final long serialVersionUID = 1; public TitlePanel() { JLabel titleLabel = new JLabel("学 生 管 理 系 统"); titleLabel.setPreferredSize(new Dimension(190, 50)); titleLabel.setForeground(new Color(204, 0, 153)); Font titleLabelFont = new Font("Dialog", Font.BOLD, 24); titleLabel.setFont(titleLabelFont); add(titleLabel); }}class MiddlePanel extends JPanel{ public static final long serialVersionUID = 2; public MiddlePanel() { JButton left = new JButton("left"); JButton mid = new JButton("mid"); JButton right= new JButton("right"); Box box = Box.createHorizontalBox(); box.add(left); box.add(mid); box.add(right); add(box); } } //********** 写xmlpackage frame;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.StringWriter;import javax.swing.JFileChooser;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Text;public class WriteXml{ private DocumentBuilderFactory factory; private DocumentBuilder builder; private Document doc; public Element root; public WriteXml(String rootname) { factory = DocumentBuilderFactory.newInstance(); try { builder = factory.newDocumentBuilder(); doc = builder.newDocument(); root = doc.createElement(rootname); } catch (ParserConfigurationException e) { e.printStackTrace(); } } public WriteXml() { factory = DocumentBuilderFactory.newInstance(); try { builder = factory.newDocumentBuilder(); doc = builder.newDocument(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } /** * 写根节点 * @param rootname 根节点名 * @return */ public Element WriteRootElement(String rootname) { root = doc.createElement(rootname); return root; } /** * 写XML文档 * @return */ public Document WriteXMLDocument() { doc.appendChild(root); return doc; } /** * 写一般节点 * @param elementname 节点名 * @return */ public Element WriteCommonElement(String elementname) { Element ele = doc.createElement(elementname); return ele; } /** * 写节点与节点的上下级关系 */ public Element WriteElementLayle(Element child,Element parent) { parent.appendChild(child); return parent; } /** * 节点文本 * @param text 文本内容 * @return */ public Text WriteTextElement(String text) { Text t = doc.createTextNode(text); return t; } /** * 节点属性 * @param e 节点 * @param attributename 属性名 * @param attributetext 属性内容 * @return */ public Element WriteElementAttribute(Element e,String attributename,String attributetext) { e.setAttribute(attributename, attributetext); return e; } public String GetDocument() { //写xml文件时,这个是必须的套式 StringWriter sw = new StringWriter(); try { Transformer t = TransformerFactory.newInstance().newTransformer(); StreamResult sr = new StreamResult(sw); t.transform(new DOMSource(doc),sr); } catch(TransformerConfigurationException e) { e.fillInStackTrace(); } catch(TransformerException e) { e.fillInStackTrace(); } finally { return sw.toString(); } }} //********** 读取界面信息package frame;import java.awt.Component;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JLayeredPane;import javax.swing.JPanel;import javax.swing.JRootPane;import org.w3c.dom.Document;import org.w3c.dom.Element;public class ReadFrame{ /** * 要读取控件的Frame */ private JFrame aFrame; private WriteXml w_xml; public ReadFrame(JFrame frame) { aFrame = frame; w_xml = new WriteXml(); } /** * 还是以“控件树”为雏型,读取界面上的控件 * @param c * @return */ public String GetFrameXml(Component[] c) { String xml = new String(); for(int i=0;i<c.length;i++) { System.out.println(c[i].getClass().toString()); xml += FrameXml(c[i]); } return xml; } /** * 还是以“控件树”为雏型,读取界面上的控件 * @param c * @return */ public String GetFrameXml() { Component[] c = aFrame.getComponents(); String xml = new String(); for(int i=0;i<c.length;i++) { System.out.println(c[i].getClass().toString()); xml += FrameXml(c[i]); } return xml; } /** * xml文档 * @param c * @return */ private String FrameXml(Component c) { System.out.println(c.getClass().getName()); String xml = ""; if(c instanceof JRootPane) { JRootPane jp = (JRootPane)c; if(jp.getComponentCount() > 1) { System.out.println(jp.getComponentCount()); xml += GetFrameXml(jp.getComponents()); } else { System.out.println("JRootPane:" + jp.getComponentCount()); return xml; } } else if(c instanceof JLayeredPane) { JLayeredPane jp = (JLayeredPane)c; if(jp.getComponentCount() > 1) { System.out.println(jp.getComponentCount()); xml += GetFrameXml(jp.getComponents()); } else { System.out.println(jp.getComponentCount()); if(jp.getComponentCount() > 0) { System.out.println(jp.getComponent(0).getClass().getName()); xml += FrameXml(jp.getComponent(0)); } } } else if(c instanceof JLabel) { JLabel jl = (JLabel)c; xml = String.format("<JLable text='%s'>%s</JLable>",jl.getText(),c.getClass().getName()); } else if(c instanceof JButton) { JButton jb = (JButton)c; xml = String.format("<JButton text='%s'>%s</JButton>",jb.getText(),c.getClass().getName()); } else if(c instanceof JPanel) { JPanel jp = (JPanel)c; xml = GetFrameXml(jp.getComponents()); } else if(c instanceof Box) { Box box = (Box)c; xml = GetFrameXml(box.getComponents()); } return xml; } //************************************* //************************************* public String GetFrameXmlDoc() { Component[] c = aFrame.getComponents(); w_xml.WriteRootElement("root"); w_xml = GetFrameXmlDoc(c,w_xml.root); w_xml.WriteXMLDocument(); return w_xml.GetDocument(); } private WriteXml GetFrameXmlDoc(Component[] c,Element parent) { for(int i=0;i<c.length;i++) { System.out.println(c[i].getClass().toString()); w_xml = FrameXmlDoc(c[i],parent); } return w_xml; } private WriteXml FrameXmlDoc(Component c,Element parent) { System.out.println(c.getClass().getName()); Element e = parent; if(c instanceof JRootPane) { JRootPane jp = (JRootPane)c; if(jp.getComponentCount() > 1) { System.out.println(jp.getComponentCount()); w_xml = GetFrameXmlDoc(jp.getComponents(),parent); } else { System.out.println("JRootPane:" + jp.getComponentCount()); return w_xml; } } else if(c instanceof JLayeredPane) { JLayeredPane jp = (JLayeredPane)c; if(jp.getComponentCount() > 1) { System.out.println(jp.getComponentCount()); w_xml = GetFrameXmlDoc(jp.getComponents(),parent); } else { System.out.println(jp.getComponentCount()); if(jp.getComponentCount() > 0) { System.out.println(jp.getComponent(0).getClass().getName()); w_xml = FrameXmlDoc(jp.getComponent(0),parent); } else return w_xml; } } else if(c instanceof JLabel) { JLabel jl = (JLabel)c; e = w_xml.WriteCommonElement("JLabel"); e.appendChild(w_xml.WriteTextElement(c.getClass().getName())); e = w_xml.WriteElementAttribute(e,"text",jl.getText()); parent = w_xml.WriteElementLayle(e, parent); } else if(c instanceof JButton) { JButton jb = (JButton)c; e = w_xml.WriteCommonElement("JButton"); e.appendChild(w_xml.WriteTextElement(c.getClass().getName())); e = w_xml.WriteElementAttribute(e,"text",jb.getText()); parent = w_xml.WriteElementLayle(e, parent); } else if(c instanceof JPanel) { JPanel jp = (JPanel)c; String name = c.getClass().getName(); name = name.substring(name.lastIndexOf(".") + 1); e = w_xml.WriteCommonElement(name); w_xml.WriteElementLayle(e, parent); w_xml = GetFrameXmlDoc(jp.getComponents(),e); } else if(c instanceof Box) { Box box = (Box)c; e = w_xml.WriteCommonElement("Box"); w_xml.WriteElementLayle(e, parent); w_xml = GetFrameXmlDoc(box.getComponents(),e); } return w_xml; }} 请问你看过jdom没?我前几天试了一下我觉得如果可以使用这个的话可能更简单写~~~你也试一下,嘿嘿~~ java如何将0x00, 0x26, 0xA6, 0x54, 0x4F, 0xF2字节数组转换为,00:26:A6:54:4F:F2格式的字符串 关于java中不能实例化的类 如何管理自己写的代码的 (请高手留步)你一个简单的算法问题 急求core java电子版! 这样的对齐方式的人工实现的还是软件实现的? java中没有专门复制文件的copy函数吗?难道这种底层函数要自己写? 在JAVA中如何定义一个不定长的数组? 谁有jcreator pro v2.5注册码,还有cuteftp xp的注册码,谢谢!(搜索不能用,只好要了 难道没人会吗? 求HashMap问题!!! 垃圾回收
package frame;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class OneFrame extends JFrame
{
public static final long serialVersionUID = 0;
public OneFrame()
{
setSize(400, 400);// 设置框架的大小
setTitle("学生管理系统");// 设置框架的标题
setResizable(true); JPanel titlePanel = new TitlePanel();
JPanel midPanel = new MiddlePanel();
Container con = getContentPane();
con.add(titlePanel, BorderLayout.NORTH);
con.add(midPanel,BorderLayout.CENTER);
}
public static void main(String[] args)
{
OneFrame frame = new OneFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GetFrameXml(frame);
frame.setVisible(true);
}
private static void GetFrameXml(JFrame f)
{
ReadFrame rf = new ReadFrame(f);
System.out.print(rf.GetFrameXml());
System.out.println(rf.GetFrameXmlDoc());
}
}
class TitlePanel extends JPanel
{
public static final long serialVersionUID = 1;
public TitlePanel()
{
JLabel titleLabel = new JLabel("学 生 管 理 系 统");
titleLabel.setPreferredSize(new Dimension(190, 50));
titleLabel.setForeground(new Color(204, 0, 153));
Font titleLabelFont = new Font("Dialog", Font.BOLD, 24);
titleLabel.setFont(titleLabelFont);
add(titleLabel);
}
}
class MiddlePanel extends JPanel
{
public static final long serialVersionUID = 2;
public MiddlePanel()
{
JButton left = new JButton("left");
JButton mid = new JButton("mid");
JButton right= new JButton("right");
Box box = Box.createHorizontalBox();
box.add(left);
box.add(mid);
box.add(right);
add(box);
}
}
package frame;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;import javax.swing.JFileChooser;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;public class WriteXml
{
private DocumentBuilderFactory factory;
private DocumentBuilder builder;
private Document doc;
public Element root;
public WriteXml(String rootname)
{
factory = DocumentBuilderFactory.newInstance();
try
{
builder = factory.newDocumentBuilder();
doc = builder.newDocument();
root = doc.createElement(rootname);
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
}
public WriteXml()
{
factory = DocumentBuilderFactory.newInstance();
try
{
builder = factory.newDocumentBuilder();
doc = builder.newDocument();
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
}
/**
* 写根节点
* @param rootname 根节点名
* @return
*/
public Element WriteRootElement(String rootname)
{
root = doc.createElement(rootname);
return root;
}
/**
* 写XML文档
* @return
*/
public Document WriteXMLDocument()
{
doc.appendChild(root);
return doc;
}
/**
* 写一般节点
* @param elementname 节点名
* @return
*/
public Element WriteCommonElement(String elementname)
{
Element ele = doc.createElement(elementname);
return ele;
}
/**
* 写节点与节点的上下级关系
*/
public Element WriteElementLayle(Element child,Element parent)
{
parent.appendChild(child);
return parent;
}
/**
* 节点文本
* @param text 文本内容
* @return
*/
public Text WriteTextElement(String text)
{
Text t = doc.createTextNode(text);
return t;
}
/**
* 节点属性
* @param e 节点
* @param attributename 属性名
* @param attributetext 属性内容
* @return
*/
public Element WriteElementAttribute(Element e,String attributename,String attributetext)
{
e.setAttribute(attributename, attributetext);
return e;
}
public String GetDocument()
{
//写xml文件时,这个是必须的套式
StringWriter sw = new StringWriter();
try
{
Transformer t = TransformerFactory.newInstance().newTransformer();
StreamResult sr = new StreamResult(sw);
t.transform(new DOMSource(doc),sr);
}
catch(TransformerConfigurationException e)
{
e.fillInStackTrace();
}
catch(TransformerException e)
{
e.fillInStackTrace();
}
finally
{
return sw.toString();
}
}
}
package frame;import java.awt.Component;import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;import org.w3c.dom.Document;
import org.w3c.dom.Element;public class ReadFrame
{
/**
* 要读取控件的Frame
*/
private JFrame aFrame;
private WriteXml w_xml;
public ReadFrame(JFrame frame)
{
aFrame = frame;
w_xml = new WriteXml();
}
/**
* 还是以“控件树”为雏型,读取界面上的控件
* @param c
* @return
*/
public String GetFrameXml(Component[] c)
{
String xml = new String();
for(int i=0;i<c.length;i++)
{
System.out.println(c[i].getClass().toString());
xml += FrameXml(c[i]);
}
return xml;
}
/**
* 还是以“控件树”为雏型,读取界面上的控件
* @param c
* @return
*/
public String GetFrameXml()
{
Component[] c = aFrame.getComponents();
String xml = new String();
for(int i=0;i<c.length;i++)
{
System.out.println(c[i].getClass().toString());
xml += FrameXml(c[i]);
}
return xml;
}
/**
* xml文档
* @param c
* @return
*/
private String FrameXml(Component c)
{
System.out.println(c.getClass().getName());
String xml = "";
if(c instanceof JRootPane)
{
JRootPane jp = (JRootPane)c;
if(jp.getComponentCount() > 1)
{
System.out.println(jp.getComponentCount());
xml += GetFrameXml(jp.getComponents());
}
else
{
System.out.println("JRootPane:" + jp.getComponentCount());
return xml;
}
}
else if(c instanceof JLayeredPane)
{
JLayeredPane jp = (JLayeredPane)c;
if(jp.getComponentCount() > 1)
{
System.out.println(jp.getComponentCount());
xml += GetFrameXml(jp.getComponents());
}
else
{
System.out.println(jp.getComponentCount());
if(jp.getComponentCount() > 0)
{
System.out.println(jp.getComponent(0).getClass().getName());
xml += FrameXml(jp.getComponent(0));
}
}
}
else if(c instanceof JLabel)
{
JLabel jl = (JLabel)c;
xml = String.format("<JLable text='%s'>%s</JLable>",jl.getText(),c.getClass().getName());
}
else if(c instanceof JButton)
{
JButton jb = (JButton)c;
xml = String.format("<JButton text='%s'>%s</JButton>",jb.getText(),c.getClass().getName());
}
else if(c instanceof JPanel)
{
JPanel jp = (JPanel)c;
xml = GetFrameXml(jp.getComponents());
}
else if(c instanceof Box)
{
Box box = (Box)c;
xml = GetFrameXml(box.getComponents());
}
return xml;
}
//*************************************
//*************************************
public String GetFrameXmlDoc()
{
Component[] c = aFrame.getComponents();
w_xml.WriteRootElement("root");
w_xml = GetFrameXmlDoc(c,w_xml.root);
w_xml.WriteXMLDocument();
return w_xml.GetDocument();
}
private WriteXml GetFrameXmlDoc(Component[] c,Element parent)
{
for(int i=0;i<c.length;i++)
{
System.out.println(c[i].getClass().toString());
w_xml = FrameXmlDoc(c[i],parent);
}
return w_xml;
}
private WriteXml FrameXmlDoc(Component c,Element parent)
{
System.out.println(c.getClass().getName());
Element e = parent;
if(c instanceof JRootPane)
{
JRootPane jp = (JRootPane)c;
if(jp.getComponentCount() > 1)
{
System.out.println(jp.getComponentCount());
w_xml = GetFrameXmlDoc(jp.getComponents(),parent);
}
else
{
System.out.println("JRootPane:" + jp.getComponentCount());
return w_xml;
}
}
else if(c instanceof JLayeredPane)
{
JLayeredPane jp = (JLayeredPane)c;
if(jp.getComponentCount() > 1)
{
System.out.println(jp.getComponentCount());
w_xml = GetFrameXmlDoc(jp.getComponents(),parent);
}
else
{
System.out.println(jp.getComponentCount());
if(jp.getComponentCount() > 0)
{
System.out.println(jp.getComponent(0).getClass().getName());
w_xml = FrameXmlDoc(jp.getComponent(0),parent);
}
else
return w_xml;
}
}
else if(c instanceof JLabel)
{
JLabel jl = (JLabel)c;
e = w_xml.WriteCommonElement("JLabel");
e.appendChild(w_xml.WriteTextElement(c.getClass().getName()));
e = w_xml.WriteElementAttribute(e,"text",jl.getText());
parent = w_xml.WriteElementLayle(e, parent);
}
else if(c instanceof JButton)
{
JButton jb = (JButton)c;
e = w_xml.WriteCommonElement("JButton");
e.appendChild(w_xml.WriteTextElement(c.getClass().getName()));
e = w_xml.WriteElementAttribute(e,"text",jb.getText());
parent = w_xml.WriteElementLayle(e, parent);
}
else if(c instanceof JPanel)
{
JPanel jp = (JPanel)c;
String name = c.getClass().getName();
name = name.substring(name.lastIndexOf(".") + 1);
e = w_xml.WriteCommonElement(name);
w_xml.WriteElementLayle(e, parent);
w_xml = GetFrameXmlDoc(jp.getComponents(),e);
}
else if(c instanceof Box)
{
Box box = (Box)c;
e = w_xml.WriteCommonElement("Box");
w_xml.WriteElementLayle(e, parent);
w_xml = GetFrameXmlDoc(box.getComponents(),e);
}
return w_xml;
}
}
我前几天试了一下
我觉得如果可以使用这个的话可能更简单写~~~
你也试一下,嘿嘿~~