- 浏览: 87969 次
文章分类
最新评论
-
xiao_feng68:
请教一下:DataSourceReport.jasper这个文 ...
ZK Jasperreport 组件 -
pkptzx:
好!!!!!!!!!!!!!!!!!!!!!!!!
ZK Jasperreport 组件 -
wshxx998:
这个好像不管用呀!我的是8.0版的!总是在敲击Request. ...
Myeclipse8.0启动配置 -
hw_alex:
hw_alex 写道只要加按钮的onClick事件就可以了
& ...
ZK GenericComposer用法 -
bllizard:
您好,我在我的工程中遇到这样的问题
<window i ...
ZK GenericComposer用法
比如你有一个index.zul页面,代码如下:
给这个主程序类传5个参数,就可以得到最终的java文件。
java生成器代码:
指定5个参数分别是:
args[0] = "D:/javacreator/zul/example/";
args[1] = "index.zul";
args[2] = "D:/javacreator/java/example/";
args[3] = "Hello.java";
args[4] = "com.yourcompany.example";
最后D:/javacreator/java/example/目录下生成的Hello.java文件代码:
<window id="hello" use="com.yourcompany.example.Hello"> <button id="hellowWorldButton" onClick="hellow.hellowWorldButtonOnClickHandler()"/> </window>
给这个主程序类传5个参数,就可以得到最终的java文件。
java生成器代码:
package com.yourcompany.applications; import com.yourcompany.generators.ZKWindowFileGenerator; public class ZKWindowFileGeneratorMain { /** * Method : main * * @param args */ public static void main(String[] args) { if (args.length != 5) { System.out.println("Usage: java ZKWindowFileGeneratorMain inputFileDir inputFileName outputFileDir outputFileName packageName"); System.exit(0); } String inputFileDir = args[0]; //输入路径 String inputFileName = args[1];//输入.zul文件名 String outputFileDir = args[2];//输出路径 String outputFileName = args[3]; //输出.java文件名 String packageName = args[4]; //java文件包名 ZKWindowFileGenerator generator = null; generator = new ZKWindowFileGenerator(inputFileDir, inputFileName, outputFileDir, outputFileName, packageName); try { generator.generate(); } catch (Exception e) { // Already printed out and logged in the DHgZKWindowFileGenerator // class. } } }
package com.yourcompany.generators; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ZKCodeGenerator { private String nl = "\n"; /** * * Method : generateMethodComment * @param methodName * @param description * @param params * @param hasReturnType * @return */ protected String generateMethodComment(String methodName, String description, String params[], boolean hasReturnType) { StringBuffer comment = new StringBuffer(); comment.append(" /**" + nl); comment.append(" * Method : " + methodName + nl ); if (description.length() > 70) { String commentString = description; while (commentString.length() > 0) { // Grab the first 50 characters int length = commentString.length(); int endIndex = 69; if (length < 69) endIndex = length; String stringToPrint = commentString.substring(0,endIndex); comment.append(" * " + stringToPrint + nl); // Remove the part that we just used. commentString = commentString.substring(endIndex); } } else comment.append(" * " + description + nl); if (params != null) { for (int i=0;i<params.length;i++) { String param = params[i]; comment.append(" * @param " + param + nl); } } if (hasReturnType) { comment.append(" * @return " + nl); } comment.append(" */" + nl); return comment.toString(); } /** * * Method : readHeaderCommentsFromFile * @param fileName - this should include full path information to the file. Ex. /home/root/headers/headerFile.txt * @return * @throws IOException */ protected String readHeaderCommentsFromFile(String fileName) throws IOException { BufferedReader in = new BufferedReader(new FileReader(fileName)); StringBuffer header = new StringBuffer(); String currentLine; while ((currentLine = in.readLine()) != null) { header.append(currentLine + "\n"); } in.close(); return header.toString(); } /** * * Method : getHeaderComments * @param project * @param fileName * @param packageName * @param className * @param author * @param locationOfUse * @param type * @param description * @return */ protected String getHeaderComments(String project, String fileName, String packageName, String className, String author, String locationOfUse, String type, String description) { String nl = new String("\n"); StringBuffer buff = new StringBuffer(); buff.append("/**" + nl); buff.append("* _YourCompany_ Copyright 2007. All Rights Reserved." + nl); buff.append("* " + nl); buff.append("* Project : " + project + nl); buff.append("* Filename : " + fileName + nl); buff.append("* Package : " + packageName + nl); buff.append("* Class : " + className + nl); buff.append("* Create Date : " + nl); buff.append("* Author : " + author + nl); buff.append("*" + nl); buff.append("* Location of Use : " + locationOfUse + nl); buff.append("*" + nl); buff.append("* Type : " + type + nl); buff.append("* " + nl); buff.append("* Description: " + description + nl); buff.append("* " + nl); buff.append("*/" + nl); return buff.toString(); } /** * * Method : getHeaderComments * @return */ protected String getHeaderComments() { String nl = new String("\n"); StringBuffer buff = new StringBuffer(); buff.append("/**" + nl); buff .append("* _YourCompany_ Copyright 2007. All Rights Reserved." + nl); buff.append("* " + nl); buff.append("* Project : " + nl); buff.append("* Filename : " + nl); buff.append("* Package : " + nl); buff.append("* Class : " + nl); buff.append("* Create Date : " + nl); buff.append("* Author : " + nl); buff.append("*" + nl); buff.append("* Location of Use : " + nl); buff.append("*" + nl); buff.append("* Type : " + nl); buff.append("* " + nl); buff.append("* Description: TODO" + nl); buff.append("* " + nl); buff.append("*/" + nl); return buff.toString(); } }
/** * Description: * * This class will take in a ZK .zul file and from that file generate the class that * extends the zk Window class. It will generate the member variables, the widget lookups in the * onCreate method, and all callback methods that are defined in the .zul file. This will save alot * of time dealing with the very tedious part of creating .zul files and the corresponding java file. * */ package com.yourcompany.generators; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Vector; import org.apache.log4j.Logger; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; public class ZKWindowFileGenerator extends ZKCodeGenerator { private static Logger logger = Logger.getLogger(ZKWindowFileGenerator.class); private String className = null; private String zkFileName = null; private String zkFileDirectory = null; private String outputFilePackage = null; private String outputFileName = null; private String outputDirectory = null; private FileWriter writer = null; private Vector components = new Vector(); /** * Constructor * * @param zkFileName */ public ZKWindowFileGenerator(String zkFileDirectory, String zkFileName, String outputDirectory, String outputFileName, String outputFilePackage) { super(); this.zkFileName = zkFileName; this.zkFileDirectory = zkFileDirectory; this.outputFileName = outputFileName; this.outputDirectory = outputDirectory; this.outputFilePackage = outputFilePackage; } public void generate() throws Exception { parseInputFile(); generateOutputFile(); } /** * Method : parseInputFile * */ private void parseInputFile() throws Exception { String fileName = null; fileName = zkFileDirectory + zkFileName; SAXBuilder builder = new SAXBuilder(); try { Document doc = builder.build(fileName); Element root = doc.getRootElement(); this.processDocument(root, 0); } // indicates a well-formedness error catch (JDOMException e) { System.out.println(fileName + " is not well-formed."); System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e); } } /** * Method: processDocument Processes the the zul file as DOM tree to get the * components with theire id's and callBackMethod * * @param current * node * @param depth * Used to go deeper in DOM tree (recursive) */ public void processDocument(Element current, int depth) { // if component has no id then ignore it if (current.getAttributeValue("id") != null) { String idString = current.getAttributeValue("id"); String componentName = current.getName(); String callbackMethod = ""; // Get callBackMethod if there is any if (componentName.equals("button")) { if (current.getAttributeValue("onClick") != null) { String callBackString = current.getAttributeValue("onClick"); int indexOfDotInCallBack = callBackString.indexOf("."); callbackMethod = callBackString.substring(indexOfDotInCallBack + 1); } } if (componentName.equals("listbox")) { if (current.getAttributeValue("onSelect") != null) { String callBackString = current.getAttributeValue("onSelect"); int indexOfDotInCallBack = callBackString.indexOf("."); callbackMethod = callBackString.substring(indexOfDotInCallBack + 1); } } if (componentName.equals("checkbox") || componentName.equals("radiogroup")) { if (current.getAttributeValue("onCheck") != null) { String callBackString = current.getAttributeValue("onCheck"); int indexOfDotInCallBack = callBackString.indexOf("."); callbackMethod = callBackString.substring(indexOfDotInCallBack + 1); } } ZKComponentHolder componentHolder = new ZKComponentHolder(componentName, idString, callbackMethod); components.add(componentHolder); } List children = current.getChildren(); Iterator iterator = children.iterator(); while (iterator.hasNext()) { Element child = (Element) iterator.next(); processDocument(child, depth + 1); } } /** * * Method : generateOutputFile */ private void generateOutputFile() throws Exception { setClassName(); String fileName = outputDirectory + outputFileName; writer = new FileWriter(fileName); writer.write(getHeaderComments() + "\n\n\n"); writer.write("package " + outputFilePackage + ";\n\n\n"); writer.write(generateImportStatements() + "\n\n\n"); writer.write("class " + className + " extends Window\n"); writer.write("{\n\n"); generateMemberVariables(); generateOnCreateMethod(); generateCallbackMethods(); generateInitializeComponentsMethod(); generateInitializeListBoxMethods(); writer.write("}\n"); writer.flush(); writer.close(); } /** * * Method : setClassName */ private void setClassName() { // int indexOfDot = zkFileName.indexOf("."); // Use the name of output (java) file instead of zul file as class name int indexOfDot = outputFileName.indexOf("."); className = outputFileName.substring(0, indexOfDot); } /** * * Method : generateImportStatemens * * @return */ private String generateImportStatements() { StringBuffer buff = new StringBuffer(); buff.append("import org.apache.log4j.Logger;\n"); buff.append("import org.zkoss.zk.ui.Executions;\n"); buff.append("import org.zkoss.zul.Button;\n"); buff.append("import org.zkoss.zul.Messagebox;\n"); buff.append("import org.zkoss.zul.Textbox;\n"); buff.append("import org.zkoss.zul.Intbox;\n"); buff.append("import org.zkoss.zul.Window;\n"); buff.append("import org.zkoss.zul.Listbox;\n"); buff.append("import org.zkoss.zul.Radiogroup;\n"); buff.append("import org.zkoss.zul.Checkbox;\n\n"); return buff.toString(); } /** * * Method : generateMemberVariables * * @throws Exception */ private void generateMemberVariables() throws Exception { writer.write(" private static Logger logger = Logger.getLogger(" + className + ".class);\n"); Iterator it = components.iterator(); while (it.hasNext()) { ZKComponentHolder holder = (ZKComponentHolder) it.next(); System.out.println("Type = " + holder.type + " Id = " + holder.id + " Callback = " + holder.callbackMethod); if (holder.type.compareTo("listbox") == 0) { writer.write(" private Listbox " + holder.id + " = null;\n"); } else if (holder.type.compareTo("textbox") == 0) { writer.write(" private Textbox " + holder.id + " = null;\n"); } else if (holder.type.compareTo("intbox") == 0) { writer.write(" private Intbox " + holder.id + " = null;\n"); } else if (holder.type.compareTo("button") == 0) { writer.write(" private Button " + holder.id + " = null;\n"); } else if (holder.type.compareTo("radiogroup") == 0) { writer.write(" private Radiogroup " + holder.id + " = null;\n"); } else if (holder.type.compareTo("checkbox") == 0) { writer.write(" private Checkbox " + holder.id + " = null;\n"); } } writer.write("\n\n\n"); } /** * * Method : generateOnCreateMethod * * @throws Exception */ private void generateOnCreateMethod() throws Exception { writer.write(generateMethodComment("onCreate", "", null, false)); writer.write(" public void onCreate()\n"); writer.write(" {\n"); writer.write(" initializeComponents();\n"); Iterator it = components.iterator(); while (it.hasNext()) { ZKComponentHolder holder = (ZKComponentHolder) it.next(); if (holder.type.compareTo("listbox") == 0) { String id = holder.id; String firstChar = id.substring(0, 1); id = firstChar.toUpperCase() + id.substring(1); writer.write(" initialize" + id + "ListBox();\n"); } } writer.write(" }\n\n\n\n"); } /** * * Method : generateInitializeComponentsMethod * * @throws Exception */ private void generateInitializeComponentsMethod() throws Exception { writer.write(generateMethodComment("initializeComponents", "", null, false)); writer.write(" public void initializeComponents()\n"); writer.write(" {\n"); Iterator it = components.iterator(); while (it.hasNext()) { ZKComponentHolder holder = (ZKComponentHolder) it.next(); if (holder.type.compareTo("listbox") == 0) { writer.write(" " + holder.id + " = (Listbox)this.getFellow(\"" + holder.id + "\");\n"); } else if (holder.type.compareTo("textbox") == 0) { writer.write(" " + holder.id + " = (Textbox)this.getFellow(\"" + holder.id + "\");\n"); } else if (holder.type.compareTo("intbox") == 0) { writer.write(" " + holder.id + " = (Intbox)this.getFellow(\"" + holder.id + "\");\n"); } else if (holder.type.compareTo("button") == 0) { writer.write(" " + holder.id + " = (Button)this.getFellow(\"" + holder.id + "\");\n"); } else if (holder.type.compareTo("radiogroup") == 0) { writer.write(" " + holder.id + " = (Radiogroup)this.getFellow(\"" + holder.id + "\");\n"); } else if (holder.type.compareTo("checkbox") == 0) { writer.write(" " + holder.id + " = (Checkbox)this.getFellow(\"" + holder.id + "\");\n"); } } writer.write(" }\n\n\n\n"); } /** * * Method : generateInitializeListBoxMethods * * @throws Exception */ private void generateInitializeListBoxMethods() throws Exception { Iterator it = components.iterator(); while (it.hasNext()) { ZKComponentHolder holder = (ZKComponentHolder) it.next(); if (holder.type.compareTo("listbox") == 0) { String id = holder.id; String firstChar = id.substring(0, 1); id = firstChar.toUpperCase() + id.substring(1); writer.write(generateMethodComment("initialize" + id + "ListBox", "", null, false)); writer.write(" public void initialize" + id + "ListBox()\n"); writer.write(" {\n"); writer.write(" }\n\n\n\n"); } } } /** * * Method : generateCallbackMethods * * @throws Exception */ private void generateCallbackMethods() throws Exception { Iterator it = components.iterator(); while (it.hasNext()) { ZKComponentHolder holder = (ZKComponentHolder) it.next(); if (holder.callbackMethod.length() > 0) { writer.write(generateMethodComment(holder.callbackMethod, "", null, false)); writer.write(" public void " + holder.callbackMethod + "\n"); writer.write(" {\n\n"); writer.write(" }\n\n"); } } } /** * Embedded class for holding component info */ protected class ZKComponentHolder { public String type; public String id; public String callbackMethod; /** * Constructor * * @param type * @param id * @param callbackMethod */ public ZKComponentHolder(String type, String id, String callbackMethod) { super(); this.type = type; this.id = id; this.callbackMethod = callbackMethod; } } /** * Getter for outputFileName * * @return Returns the outputFileName. */ public String getOutputFileName() { return this.outputFileName; } /** * Setter for outputFileName * * @param outputFileName * The outputFileName to set. */ public void setOutputFileName(String outputFileName) { this.outputFileName = outputFileName; } /** * Getter for writer * * @return Returns the writer. */ public FileWriter getWriter() { return this.writer; } /** * Setter for writer * * @param writer * The writer to set. */ public void setWriter(FileWriter writer) { this.writer = writer; } }
指定5个参数分别是:
args[0] = "D:/javacreator/zul/example/";
args[1] = "index.zul";
args[2] = "D:/javacreator/java/example/";
args[3] = "Hello.java";
args[4] = "com.yourcompany.example";
最后D:/javacreator/java/example/目录下生成的Hello.java文件代码:
/** * _YourCompany_ Copyright 2007. All Rights Reserved. * * Project : * Filename : * Package : * Class : * Create Date : * Author : * * Location of Use : * * Type : * * Description: TODO * */ package com.yourcompany.example; import org.apache.log4j.Logger; import org.zkoss.zk.ui.Executions; import org.zkoss.zul.Button; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Textbox; import org.zkoss.zul.Intbox; import org.zkoss.zul.Window; import org.zkoss.zul.Listbox; import org.zkoss.zul.Radiogroup; import org.zkoss.zul.Checkbox; class Hello extends Window { private static Logger logger = Logger.getLogger(Hello.class); private Button hellowWorldButton = null; /** * Method : onCreate * */ public void onCreate() { initializeComponents(); } /** * Method : hellowWorldButtonOnClickHandler() * */ public void hellowWorldButtonOnClickHandler() { } /** * Method : initializeComponents * */ public void initializeComponents() { hellowWorldButton = (Button)this.getFellow("hellowWorldButton"); } }
发表评论
-
ZK7和Bootstrap 3
2013-09-09 10:24 927ZK 7是一个即将到来的大版本, ... -
ZK 5 客户端编程
2010-04-22 21:26 14871. 简介 为了在客户端执行应用程序特有的一些代码,ZK5 ... -
ZK5 and jQuery 2
2010-02-04 15:50 1136ZK 的label组件有setValue方法,如果当它的值发生 ... -
ZK5 and jQuery
2010-02-04 15:35 1153在ZK5.0版本,可以结合jQuery使用,来实现一些客户端的 ... -
ZK studio 0.9.3发布
2009-03-24 16:43 1188ZK Studio0.9.3发布了,新增了一个重要的功能,Ze ... -
在Myeclipse7.0中使用Zk studio0.9.1
2008-12-16 15:31 4283在Myeclipse7.0以前的版本中安装的ZK studio ... -
ZK3.5.2和ZK Studio0.9.1发布
2008-12-12 11:12 1335[size=medium;]ZK3.5.2和ZK Studio ... -
用ZK 样式工具自定义样式
2008-11-05 13:22 3196ZK官网最近发布了一个修改样式的工具,使用十分方便。适用于ZK ... -
ZK Studio 0.8.2发布,支持在组件面板中拖拽组件到页面中
2008-09-16 12:50 1935昨天ZK官方发布了ZK Studio 0.8.2,比较引人注目 ... -
ZK portallayout组件
2008-08-13 23:21 2551ZK 3.5版本新增加了一个portallayout组件,效果 ... -
ZK新官网上线
2008-07-24 11:08 1519官网右上角居然有国民党旗 -
ZK Listgroup/Group组件
2008-05-04 10:31 2515在ZK下一个版本3.1.0中,将增加Listgroup/Gro ... -
ZK3.0.4发布
2008-03-28 11:48 3030新功能介绍: 1、 <include src=& ... -
zkDiagram: interactive diagrams and visual program
2008-03-20 09:42 1987zkDiagram是 draw2d 库的综合 .使用这个库可以 ... -
Zk Android开发
2008-03-05 10:21 21821、去ZK官网下载zkand-bin-0.8.1.zip。比如 ... -
ZK-designer
2008-02-16 13:45 2108自己修改了开源的ZK可视化编辑器ZeroKode0.8.1部分 ... -
ZK Studio0.5.0发布
2008-02-08 09:46 1600ZK Studio是一个Eclipse插件,用于用户快速创建Z ... -
ZK 3.0.3和ZK Spreadsheet 0.7.0发布
2008-02-04 21:59 16841、在发布3.0.2后10天,ZK3.0.3发布了,该主要是修 ... -
用 ZK Canvas 组件画图
2008-02-04 21:44 2462ZK Canvas组件可以创建一个画图区域并且允许动态的产生图 ... -
ZK 3.0.2发布
2008-01-23 11:08 1992<!-- 只能选择 Oct.12, 2007 到 Dec ...
相关推荐
ZK主题生成器是一款专为ZK框架设计的工具,旨在帮助开发者轻松创建和定制ZK应用的主题,而无需深入理解复杂的CSS(层叠样式表)语言。ZK是一个流行的Java AJAX框架,它允许开发人员构建富客户端Web应用程序,提供...
java源码包实例源码JAVA开发源码50个合集: Ajax框架 ZK.rar Java图书馆管理系统源程序.rar Java图片倒影效果实例源码.rar ...连接postsql数据库的java代码.rar 附加数据库.rar 雷电游戏JAVA版源程序.rar
图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
ZK是一款强大的基于Java的Ajax框架,它为开发者提供了构建富互联网应用程序(Rich Internet Applications,简称RIA)的强大工具。ZK的主要特点是无需JavaScript编程,即可实现客户端的交互效果,这使得开发过程更为...
ZK是一个基于组件的Java Web UI框架,它允许开发者创建富客户端应用程序而无需深入JavaScript或其他前端技术。这款插件将ZK的功能无缝整合到Eclipse和MyEclipse中,提供了诸如代码自动完成、调试、项目模板等强大...
8. **代码生成器**:自动生成事件处理方法、数据绑定代码,减少重复工作。 9. **ZK更新检查**:自动检测ZK框架的最新版本,提醒用户更新,保持开发环境的最新状态。 **安装ZK Studio插件步骤:** 1. 打开Eclipse...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
7. **ZK Composer**:ZK提供的设计工具,允许开发者通过图形化界面来设计和编辑用户界面,然后自动生成对应的ZUML代码。 8. **Ajax和 Comet 技术**:ZK利用Ajax技术实现页面的部分刷新,提高用户体验。同时,它还...
中控ZK4500指纹采集器的SDK包含了所有必要的组件,使得开发者能够在C#、Java和VC++环境中实现指纹采集、识别和比对等功能。 2. **C#示例程序** C#是一种面向对象的编程语言,以其简洁、类型安全的特性深受开发者...
- **NetBeans with REM**:REM是ZK为NetBeans提供的集成工具,同样支持项目模板、代码生成等特性,使开发过程更加顺畅。 - **手动设置**:对于不习惯使用IDE的开发者,ZK也提供了详细的指导,教你如何手动配置环境...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
ZK加载器用于解析URL请求并生成HTML页面,而ZK异步更新引擎则负责监听和处理客户端的Ajax请求,并实时更新ZK组件的状态。 - **基于组件的GUI设计**:ZK提供了一套丰富的组件库,这些组件类似于HTML标签但更为灵活...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...
Java demo会展示如何在代码中实现这些安全措施。 4. **数据处理**:门禁系统会生成大量的数据,如出入记录、设备状态等。Java demo可能会有数据解析、存储和查询的示例,这可能涉及到Java的集合框架、数据库操作...
### ZK(AJAX开发工具)开发手册 #### 一、引言 ZK作为一款强大的工具被广泛应用于RIA(Rich Internet Applications)Web应用程序的界面开发。与传统的Web应用程序相比,ZK提供了一种更为直观且高效的方式来进行...
jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...