微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > 用 Eclipse 开发 iPhone Web 应用程序

用 Eclipse 开发 iPhone Web 应用程序

时间:07-25 来源:IBM 点击:

图 8. 像导航本机 iPhone 应用程序一样导航 Javadoc 包

  图 9 显示了在 iPhone Preview 模式下显示的最终的 java.rmi 包。

图 9. 在 java.rmi 包中导航接口、类和异常

  对于 iDoc 的目标详细信息页面,使用另一种 iPhone 构造:圆角矩形列表。这些列表对于分组信息十分有用,并且 iPhone 中的设置面板都使用这种列表。使用圆角矩形列表可以分隔方法签名与参数及异常清单。在 V0.13 中,iUi 只支持将圆角矩形列表用于表单输入;将其元素用于静态文本将生成格式错误的块。 使用定制的 iDoc.css 文件扩展这些 CSS(如清单 2 所示),以添加用于显示带有静态文本的圆角矩形列表的 textRow 元素。

  清单 2. 定制 textRow CSS 扩展以正确显示静态文本

  /* Adding a new row CSS style to iUi for displaying blocks of text */

  .textRow {

   position: relative;

  border-bottom: 1px solid #999999;

   -webkit-border-radius: 0;

   text-align: right;

  }

  .textRow > p {

   text-align: left;

   margin: 5px 8px 5px 10px;

   padding: 0px 0px 0px 0px;

  }

  fieldset > .textRow:last-child {

   border-bottom: none !important;

  }

  清单 3 显示了 java.math.BigDecimal 的一种构造方法的详细信息页面。

  清单 3. 使用 textRow 元素的 HTML 详细信息页面

  <div title="BigDecimal"

   >

   <fieldset>

    <div><p><b>

   public BigDecimal(long, MathContext)</b></p></div>

   <div><p>Translates a

   <code>long</code> into a

   <code>BigDecimal</code>, with rounding according to the context settings.
  
   The scale of the <code>BigDecimal</code>, before any rounding, is zero.

   </p></div>

   </fieldset>

   <h2>Parameters</h2>

   <fieldset>

   <div><p><b>long val

   </b>: <code>long</code> value to be converted

   to <code>BigDecimal</code>.</p></div>

   <div><p><b>MathContext mc

   </b>: the context to use.</p></div>

   </fieldset>

   <h2>Throws</h2>

   <fieldset>

   <div><p><b>ArithmeticException

   </b>: if the result is inexact but

   the rounding mode is <code>UNNECESSARY</code>.</p></div>

   </fieldset>

  </div>

  <fieldset> 标记内的所有内容都位于圆角矩形内,textRow <div> 用于分隔行。带有 <h2> 标记的标题显示为列表上方的组标签。图 10 显示了最终页面。

图 10. java.math.BigDecimal 中的构造函数的详细视图

  拥有三个导航级别和目标详细信息页面后,UI 就完成了。iDoc 使用户可以专注于具体任务。借助 iUi 框架和一些定制的 CSS,它看上去很像本机 iPhone 应用程序。

  开发 iDoc

  现在已经设计了 UI,接下来需要编写代码来生成 HTML 文件。创建一个插入到 Sun 的 javadoc 命令中的简单 doclet。我们的示例将使用标准 java.* 包,但是 iDoc 可以从任何源代码生成 Javadoc。使用 OpenJDK 源代码,因为它可以公开获得并且 GNU Public License (GPL) V2 许可证允许我们生成和发布其 Javadoc。

使用 iDoc,只需迭代包和类并调用方法打印上述格式的静态 HTML 页面。清单 4 显示打印目标详细信息页面的方法。

  清单 4. 输出详细信息页面的 Doclet 代码

  private void printDetail(PrintStream p, ProgramElementDoc doc,

   String id, String name) {

   divHeader(p, id, name, "panel");

   textHeader(p, null);

   textRow(p, getSignature(doc));

   textRow(p, getCommentText(doc.commentText()));

   textFooter(p);

   if (doc instanceof ExecutableMemberDoc) {

   printMethodDetail(p, (ExecutableMemberDoc) doc);

   }
  
   divFooter(p);

  }

  private void printMethodDetail(PrintStream p, ExecutableMemberDoc field) {

   if (field.parameters().length > 0) {

   textHeader(p, "Parameters");

   for (int i=0; i<field.paramTags().length; i++) {

   textRow(p, "<b>" + field.parameters()[i].typeName() + " "

   + field.paramTags()[i].parameterName()

   + "</b>: "

   + getCommentText(field.paramTags()[i].parameterComment()));

   }

   textFooter(p);

   }

   if (field.throwsTags().length > 0) {

   textHeader(p, "Throws");

   for (int i=0; i<field.throwsTags().length; i++) {

   textRow(p, "<b>" + field.throwsTags()[i].exceptionName()

   + "</b>: "

   + getCommentText(field.throwsTags()[i].exceptionComment()));

   }

   textFooter(p);

   }

  }

 代码是通用的,这样 printDetail() 将处理类描述、字段、构造函数和方法的输出。后两种类型是 ExecutableMemberDoc 的子类,因此打印关于其参数和已抛出异常的附加信息。

Aptana 的 iPhone Preview 模式将帮助调试输出文件。在每次迭代后,您可以快速单击该应用程序查找已设计界面中的不一致性。但是,使用 Preview 模式可以掩盖性能问题:现代计算机的运行速度比 iPhone 的 620-MHz ARM 处理器快三至五倍。此外,用户经常通过速度慢的蜂窝网络下载页面,因此必须用实际 iPhone 运行您的应用程序。

  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top