⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jaxb.htm

📁 这是一个实现登陆的页面程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·还有更多的选项,请参考JAXB的相关文档。</P>
<P>&nbsp;&nbsp;&nbsp; 
如果运行成功的话,就会在你"-d"选项指定的目录下产生一些java代码。如果感兴趣的话,大家可以查看这些代码进行详细的研究。如果你就想知道怎样使用它们的话,那么只需要简单的了解就行了。</P>
<P>·在应用程序中使用这些代码</P>
<P>&nbsp;&nbsp;&nbsp; 
下面我们分析一下如何在我们的应用程序中使用JAXB工具包替我们生成的代码。在我们的实例中,主要有两个Java源文件:JaxbDemoFrame.java和MyCanvas.java。当然,大家也可以从此处下载所有的源代码。</P>
<P>JaxbDemoFrame.java</P>
<P><BR>&nbsp;&nbsp;&nbsp; JaxbDemoFrame.java中大部分都是处理Frame中<A 
href="http://www.itisedu.com/phrase/200603302222545.html" 
target=_new>组件</A>的代码。包括画布、菜单的初始化,以及各种事件的处理代码。其中和JAXB有关的有JAXB初始化代码:</P>
<P>&nbsp;126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //init 
jaxb<BR>&nbsp;127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>&nbsp;128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
JAXBContext jc = JAXBContext.newInstance( "epri.jaxb" 
);<BR>&nbsp;129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ObjectFactory objFactory = new 
ObjectFactory();<BR>&nbsp;131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
myContainer = 
objFactory.createShapeContainer();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
......<BR>&nbsp;134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
m = 
jc.createMarshaller();<BR>&nbsp;135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
u = 
jc.createUnmarshaller();<BR>&nbsp;136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE 
);<BR>&nbsp;137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( JAXBException je ) 
{<BR>&nbsp;140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
je.printStackTrace();<BR>&nbsp;141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </P>
<P>&nbsp;&nbsp;&nbsp; JAXBContext 提供了一个入口,通过这个入口可以管理必要的XML/Java绑定信息。<A 
href="http://www.itisedu.com/phrase/200603082208195.html" 
target=_new>客户端</A>应用程序通过newInstance(contextPath)方法得到该类的新实例。contextPath 
参数包含一个或多个Java包名,这些Java包就是了JAXB编译器所产生的接口代码所在的Java包。该参数值初始化JAXBContext 
对象,使得它能够管理JAXB编译器产生的接口;而通过ObjectFactory,可以直接生成根节点java对象ShapeContainer;对于Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口(Marshaller负责从Java对象到XML文档的转换,Unmarshaller负责从XML文档到Java对象的转换)。</P>
<P>&nbsp;&nbsp;&nbsp; 在打开文件的操作代码中,也有对JAXB的操作:</P>
<P>150&nbsp;&nbsp;&nbsp; private void openFile()&nbsp; 
{<BR>151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileDialog open = new 
FileDialog(this,"open file..",FileDialog.LOAD); 
<BR>152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
open.setVisible(true);<BR>153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename 
= open.getDirectory()+open.getFile();<BR>154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myContainer&nbsp; 
=(ShapeContainer)u.unmarshal( new 
FileInputStream(filename));<BR>156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
this.canvas.setShapeContainer(myContainer);<BR>157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
this.canvas.repaint();<BR>158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( 
JAXBException je ) 
{<BR>159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
je.printStackTrace();<BR>160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch 
(FileNotFoundException fe) 
{<BR>161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
System.out.println("file not found!");<BR>162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>163&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unmarshaller.unmarshal() 
的方法可以直接将一个XML文件里的数据转换成Java对象。此对象应该是整个java对象树中最靠近根的对象(在本例中为ShapeContainer)。其他的对象都可以通过这个根对象的其他方法进一步获得,下面的章节会介绍到。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在文件保存的操作代码中,也有对JAXB的操作:</P>
<P>182&nbsp;&nbsp; private void saveAsFile() 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
......<BR>187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
m.marshal(myContainer, new 
FileOutputStream(filename));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
......<BR>193&nbsp;&nbsp;&nbsp; }</P>
<P>Marshaller.marshal()的方法是将一个根节点的Java对象,连同这个对象内部所包含的其他所有对象,都按照Schema的要求将对象中的内容输出到XML文档中去。</P>
<P>MyCanvas.java</P>
<P>MyCanvas.java主要是画布的绘图操作,包含了鼠标事件的响应和绘制屏幕的方法中。在MyCanvas.java也有一些代码使用了JAXB生成的class。</P>
<P>53 public void mousePressed(MouseEvent e) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .......</P>
<P>65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.List shapeList = 
myContainer.getShape();<BR>66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ShapeType newType = 
this.objectFactory.createShapeType();<BR>68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
newType.setShapecolor(this.currentColor);<BR>69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
newType.setShapename(this.currentgraph);<BR>70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
newType.setXposition(this.currentX);<BR>71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
newType.setYposition(this.currentY);<BR>72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
shapeList.add(newType);<BR>73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch( 
JAXBException je ) 
{<BR>74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
je.printStackTrace();<BR>75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
repaint();<BR>77&nbsp;&nbsp;&nbsp; }</P>
<P><BR>90&nbsp; public void paint(Graphics g) 
{<BR>91&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (myContainer 
!=null){<BR>92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
java.util.List shapeList = 
myContainer.getShape();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
......&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( 
Iterator iter = shapeList.iterator(); iter.hasNext(); ) 
{<BR>96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ShapeType&nbsp; myshape =&nbsp; 
(ShapeType)iter.next();<BR>97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
String shapename = 
myshape.getShapename();<BR>98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
String shapeColor = 
myshape.getShapecolor();<BR>99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int xposition = 
myshape.getXposition();<BR>100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
int yposition = 
myshape.getYposition();<BR>101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (shapeColor.equals("red"))&nbsp; 
g.setColor(Color.red);<BR>102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if (shapeColor.equals("green"))&nbsp; 
g.setColor(Color.green);<BR>103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(shapename.equals("circle")) 
g.drawOval(xposition-25,yposition-25,50,50);<BR>104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(shapename.equals("rect")) 
g.drawRect(xposition-25,yposition-25,50,50);<BR>105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
this.setForeground(currentcolor);<BR>106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>108&nbsp;&nbsp;&nbsp; 
}</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
在鼠标点击事件的处理中和屏幕绘制的方法中有大量使用JAXB所生成的类的代码(黑体字所表示的)。这些代码比较清楚的表现了怎样使用JAXB所生成的类。鼠标点击事件的处理中,根据程序的逻辑,每次鼠标的点击都应该根据鼠标当前的位置,画笔的当前颜色和当前的形状,来创建一个图形,并将此图形添加到整个对象树中去;而在屏幕绘制的paint()方法中,应用程序遍历整个对象树,找到每个图形的属性,并将它们绘制在屏幕上。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
JAXB所生成的代码都有一定的规律(遵循JAXB标准),这些规律非常简单易用。例如,在Schema中我们规定了,在ShapeContainer中允许有一个或多个shap节点,那么在生成的ShapeContainer这个类中就getShape()方法来返回一个shape的集合。又比如,在Schema中我们规定了每个shape都有一些属性(shapename, 
shapecolor, xposition, 
yposition)。那么在相应的ShapeType的类中,我们就会看到get和set的一些方法去设置和获得这些属性的值。</P>
<P></FONT><FONT face=Verdana><STRONG>六. 参考资料</STRONG></FONT></P>
<P><FONT face=Verdana>1. JAXB开发包下载 
http://java.sun.com/webservices/downloads/webservicespack.html</FONT></P>
<P><FONT face=Verdana>2. AXB学习文档 
http://java.sun.com/webservices/docs.html</FONT></P>
<P><FONT face=Verdana>3. XML Schema资料 http://www.w3.org/XML/Schema</FONT></P>
<P><FONT face=Verdana>4. Java对象序列化文档 
http://java.sun.com/j2se/1.4.1/docs/guide/serialization/index.html</FONT></P>
<P>(来源<FONT face=Verdana><SPAN lang=EN-US style="FONT-SIZE: 9pt">SUN中国<A 
href="http://www.itisedu.com/phrase/200604232134205.html" 
target=_new>软件</A>技术中心</SPAN>)</FONT></P>
<P><FONT face=Verdana></FONT>&nbsp;</P></FONT>
<P><BR></FONT>&nbsp;</P>
<P><BR>&nbsp;</P></FONT></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -