今年9月中旬Borland正式推出了JBuilder 2005,这是去年发布的JBuilderX的升级版,为开发人员提供了更全面的工具以减少Java开发的复杂性并优化软件的性能。JBuilderX获得了开发人员很高的赞誉,然而JBuilder 2005却提供了更强大的性能,它包括了以下方面的改进: 综合管理性能,常规错误代码的检测功能,为增强安全性能提供一种新的安全检测代码;同时还提高与Borland其它解决方案结合的能力。
目前Borland推出的JBuilder 2005有三个版本:
Borland JBuilder Enterprise:主要针对J2EE,网页程序和网页服务器开发。
Borland JBuilder Developer:主要针对于网页程序和中心代码开发。
Borland JBuilder Foundation:具有开发Java应用程序完整功能的免费环境。
阅读导航:
一、JBuilder 2005的新特性
JBuilder 2005加速企业JavaBeans,WEB服务器,XML,移动产品和数据库应用程序开发,双向可视化设计工具和迅速调用J2EE应用服务器,这些应用服务器包括BEA WebLogic,IBM WebSphere,Sybase EAServer, JBoss和 integrated Borland Enterprise Server。拥有创新强大的JavaServer Faces,Struts和 Web服务设计工具,支持J2SE 5.0 (即JDK 1.5),UML代码可视化,分布式因子分解,代码审核,企业单位测试,多语控制系统等。
二、图解JBuilder 2005开发Applet程序
从简单的Applet程序开始我们一步一步的领略JBuilder 2005的强大功能。为了提高读者的感性认识,在每个一步骤中我都提供了明确的图形。
三、在JBuilder 2005中测试Applet程序
Borland在JBuilder 2005内内置了两种Applet的测试工具:AppletTestBed和Applet Viewer。
结束语
本文仅仅介绍了JBuilder 2005在开发Applet程序上的便利,但这只是JBuilder2005的优秀性能的冰山一角,我的目的只是希望读者朋友能通过本文对JBuilder 2005有个初步的认识,我将在以后的文章继续向大家介绍JBuilder 2005在开发EJB、Web服务以及与UML集成方面的应用。
一、JBuilder 2005的新特性
JBuilder 2005加速企业JavaBeans,WEB服务器,XML,移动产品和数据库应用开发,双向可视化设计工具和迅速调用J2EE应用服务器,这些应用服务器包括BEA WebLogic,IBM WebSphere,Sybase EAServer, JBoss和 integrated Borland Enterprise Server。拥有创新强大的JavaServer Faces,Struts和 Web服务设计工具,支持J2SE 5.0 (即JDK1.5), UML代码可视化,分布式因子分解,代码审核,企业单位测试,支持多语控制系统。


JBuilder 2005的新特性有:
1、支持最新标准,快速开发各类型 Java 应用程序
Borland JBuilder 2005 Enterprise 版支持各类型 Java 应用程序开发,包含 JSF、JavaServer Page (JSP)、Servlets、Enterprise JavaBean (EJB)、Web Services、Struts、XML、Swing、数据库应用程序、行动式设备应用程序等,JBuilder 协助开发人员了解最新J2SE 5.0 (JDK 1.5) 语言新功能所能带来之帮助,并针对 J2SE 5.0提供程序代码重构 (Refactoring) 与除错能力, JBuilder 2005 亦内建符合 J2EE 1.4 规格之 Tomcat 5.0 Web 服务器。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)2、开发企业级J2EE 平台应用程序,部署于主要应用程序服务器
运用双向可视化的EJB设计工具,可快速建立能够重复使用之Enterprise JavaBean。可视化双向之部署描述编辑器(Deployment Descriptor Editor),帮您管理部署结构( structure )、交易(transaction )、策略(policies)、权限角色( security role)与其它组合与部署 EJB 所需之属性与信息,并且涵盖标准部署描述(Deployment Descriptor)与特定服务器专属之部署描述。JBuilder 紧密整合多重业界领先之J2EE应用服务器,包括Borland Enterprise Server、BEA WebLogic Server、JBoss、IBM WebSphere 与 Sybase EAServer。
3、简化 JavaServer Faces 与 Struts 应用程序开发
运用 JBuilder 所提供之多项工具与精灵,使得运用 JSF、Struts、Servlets、JavaServer Page 与 JSP表达式语言(Expression Language) 开发动态 Web 应用程序变得更为容易,运用流程设计工具可将现有 Web 应用程序建立 JSF 所需之档案,组合而成全功能之应用程序。Struts 设计工具将开发以 Struts 为基础之应用程序所需之工具紧密结合。此外, TagInsight 精灵能够针对 JSP、HTML与 XML 档案自动提示标签(Tag),并可将 JSP 表达式语言(Expression Language) 关键词以不同色彩标示,提升程序代码撰写速度并减少错误发生之机会。
4、运交高质量、高效能之应用程序
JBuilder 2005 Enterprise 版是市场上唯一完全整合效能调校工具之Java 整合开发环境,内建包含剖析工具(profiler ) 、执行绪除错器( thread debugger ) 与程序代码涵盖分析工具(Code Coverage),协助开发人员找出与修正效能相关问题。JBuilder 2005 Enterprise 版中增添了J2EE 效能剖析工具 Borland Optimizeit Request Analyzer协助您分析 J2EE 架构中跨越不同层级 ( tiers ) 程序代码之执行效率。
此外, JBuilder 2005 中所内建之程序代码稽核 ( code audit ) 工具能够自动发现常见之错误写码方式,进而协助开发团队建立高质量、高效能之应用系统。
二、使用JBuilder 2005开发Applet应用
为了协助我们开发、测试与部署Applet应用程序,JBuilder2005提供下列工具:
Applet Wizard:可快速建立Applet基本结构与相对应的HTML文件。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)AppletTestBed:JBuilder提供的Applet执行与测试工具,我们可以利用它来查看Applet执行结果。
Applet Viewer:Sun Microsystems公司提供的Applet执行与测试工具。
(一)使用Applet Wizard
JBuilder 2005提供的Applet Wizard可协助我们建立Applet的基本程序代码。启动Applet Wizard的方式如下:
● 选取File | New,打开Object Gallery对话框。
● 在Web窗格内,选取Applet图标后按下[OK]按钮。(如下图1)

图1(点击放大)
以下是Applet Wizard的各项步骤:
在步骤一中我们要在name栏中输入HelloApplet,directory栏中修改路径为c: jbprojectHelloApplet,并勾选[Generate standard method)选项。按下[Next]按钮前往步骤二。(如下图2)

图2(点击放大)
在步骤二中有JDK版本、Output path、Backup path、working directory以及选择的default path和test path,在这里我们都选默认值,按下[Next]按钮前往步骤三。(如下图3)

图3(点击放大)
在步骤三中我们修改class Javadoc fields中的Title、Description、Copyright、Company、author和version字段的值,其他项采用默认值,按下[Finish]按钮。(如下图4)

图4(点击放大)
接下来开始下面的Applet Wizard四个步骤操作:(如下图5)
图5(点击放大)
● Package字段:Applet隶属的套件名称,默认为目前工程名称。
● Class name字段:Applet类名称。
● Base class字段:Applet所继承的基础类,分为java.applet.Applet与javax.swing.JApplet两种;前者为AWT套件,后者则是使用Swing套件。
此步骤还包含下列三个选项:
● Generate header comments:在Applet类文件内加上标头注解信息(设置于Project Properties对话框的General窗格)。
● Can run standalone:在Applet类内加入一个main()方法(主要用途是方便测试), 我们不需要另外撰写一个HTML文件就可以测试Applet。
● Generate standard methods:建立标准的Applet方法,例如:start()、stop()、destroy()、getAppletlnfo()与getParameterlnfo()方法。
选择[Next] 按钮进入下一步:(如下图6)

图6(点击放大)
现在我们可以设置欲传入Applet的参数了。Applet Wizard会在HTML文件的<applet>标签内产生<param>标签,并在Applet类文件内加入必要的程序代码。点击[Add Parameter]按钮将产生一笔新数据,其Name字段值默认为param0。
选择[Next] 按钮进入下一步:(如下图7)

图7(点击放大)
在这一步中,如果我们勾选了[Generate HTML Page)选项,Applet Wizard将会建立一个HTML文件:其中包含调用Applet所需要的<applet>标签。此外,我们可以通过Name、Codebase、Width、Height等字段来设置<applet>标签的各项属性。
选择[Next] 按钮进入下一步:(如下图8)

图8(点击放大)
在这一步中,我们可以定义Applet的运行时期配置(runtime configuration)。如果我们的工程内并未定义任何运行时期配置,[Create a runtime configuration)默认会被勾选,请在Name字段内指定运行时期配置的名称。按下[Finish]按钮,离开Applet Wizard。回到工程窗格中,我们将发现Applet Wizard产生了两个文件:HelloApplet.java与 HelloApplet.html。
(二)编译并执行HelloApplet
虽然HelloApplet尚未具备任何功能,但是它已经是一个不折不扣的Applet了,让我们先看看它的执行结果。请在AppBrowser主菜单内选取Run | Run Proiect,执行结果如图9所示。

图9(点击放大)
当我们按下[Exit]按钮离开,接下来将设计Applet的用户界面。
(三)设计Applet用户界面
在此步骤中,我们将利用JBuilder 2005的设计工具为HelloApplet添加较丰富的用户界面,步骤如下。
1、在工程窗格中,以鼠标左键双击HelloApplet.java文件,将它打开于JBuilder编辑器中。
2、选取编辑器下方的Design页签。
3、如图10所示,先在结构窗格的组件树中选取this节点,然后在查看器内将this节点的Layout属性更改为BorderLayout(原来为<defaultlayout>)。

图10(点击放大)
4、依照下列步骤在Applet内加入两个Panel容器对象
点击组件托盘的AWT页签,在AWT页签内选取java.awt.Panel组件,然后以鼠标左键点击结构窗格的this节点。新的Panel对象将会出现在this节点下方,名称为panel1。请在查看器中将panel1的Constraints属性设置为North。仿照上一步骤加入第二个Panel对象,将它的Constraints属性设置为Center。
5、更改Panel对象的名称与属性
在panel1上点击鼠标右键,选取[Rename],将其名称更改为UpperPanel。接着在查看器内将background属性更改为Light Gray。
在panel2上点击鼠标右键,选取[Rename],将其名称更改为LowerPanel。接着在查看器内将background属性更改为White(我们也可以依照自己的喜好来设置背景颜色)。
6、在LowerPanel加入两个Panel对象
将LowerPanel的layout属性设置为CardLayout,在组件托盘内选取AWT页签的java.awt.Panel组件,然后点击结构窗格的LowerPanel节点,这个动作将加入一个Panel对象。新加入的Panel对象会出现在LowerPanel节点下方(名称为panel1)。依此要领加入第二个Panel对象(名称为panel2)。
将panel1与panel2的Layout属性设置为BorderLayout,将panel1与panel2的background属性分别设置为White与Pink。
完成上述所有步骤后,请先保存我们的工程。 现在我们已经完成Applet用户界面的基本雏形,接下来要加入某些UI组件。
(四)设计UpperPanel容器对象
依照下列步骤在UpperPanel内加入两个UI组件(Label与Choice):
1、在组件托盘的AWT页签内选取,java.awt.Choice组件,然后点击结构窗格的UpperPanel节点。新的Choice组件将会出现在UpperPanel节点下方。
2、在组件托盘的AWT页签内选取java.awt.Label组件,然后点击结构窗格的UpperPanel节点,这个动作将会加入新的Label组件。新的Label组件将出现在UpperPanel节点下方。
3、更改lable1对象的属性:
在结构窗格内点击label1对象,将Text属性更改为Select a language:"。点击font属性的按钮打开Font对话框,在Size字段里输入20。 将foreground属性设置为Blue,Select a Language:字符串将以蓝色显示。
4、在panel1与panel2对象内分别加入一个Label组件。首先在组件托盘内选取AWT页签的java.awt.Label组件,然后点击LowerPanel节点下的panel1节点。新加入的Label对象将会出现在panel1节点下方(名称为label2)。依此要领,在panel2内加入另一个Label组件(名称为label3)。
5、依照下列方式设置label2的属性
将text属性设置为Good Movning!,constraints属性设置为Center, alignment属性设置为CENTER。点击font属性的按钮,在Font对话框内将Size设置为24。
6、依照下列方式设置label3的属性
将text属性设置为早上好,constraints属性设置为Center,alignment属性设定为CENTER。点击font属性的按钮,在Font对话框内将Size设置为24。
完成上述步骤就会出现如下图11所示:

图11(点击放大)
(五)设计Choice对象在此步骤中,我们将在Choice对象内加入两个选项,并加入必要的程序代码。
1、点击编辑器下方的Source页签,切换到源代码编辑画面。
2、点击结构窗格的init()方法,JBuilder 2005会自动将光标移到init()方法的声明位置。
3、在init()方法内加入下列两行程序代码,用蓝颜色标识的(位于try/catch区块上方):(如下图12所示)

图12(点击放大)
---------------------------------------------------
choice1.addItem("English");
choice1.addItem("Chinese");
--------------------------------------------------
说明:additem()方法可以为Choice对象加入一个选项。
4、点击Design页签回到UI设计工具。
5、在结构窗格内点击choice1节点,然后选取查看器的Event页签。
6、以鼠标左键双击itemStateChaoged事件,JBuilder会在HelloApplet.java内新增一个choice1_itemStateChanged()方法,并将光标移到该方法所在位置。
7、参考下列范例撰写choice1_itemstateChanged()方法的内容,用蓝颜色标识的(如下图13所示)。
------------------------------------------------------------------------------------
public void choice1_itemStateChanged(ItemEvent e) {
if ("English".equals(choice1.getSelectedItem())){
cardLayout1.show(LowerPanel,"panel1");
}
else if ("Chinese".equals(choice1.getSelectedItem())){
cardLayout1.show(LowerPanel,"panel2");
}
}
-------------------------------------------------------------------------------------

图13
当HellloApplet被执行时,如果Choice选项为English,LowerPanel对象内将显示Good Movning!字符串(包含于panel1容器);如果Choice选项为Chinese,LowerPanel对象内将显示早上好字符串(包含于panel2容器)。
8、保存JBuilder工程,编译并执行HelloApplet,执行结果如图14所示。

图14
9、将[Select a language]旁边的下拉式菜单(Choice对象)切换至Chinese,我们将发现下方的信息更改为早上好。如图15所示。

图15
Applet1.java源代码如下:
package helloapplet;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/**
* <p>Title: Study</p>
*
* <p>Description: This is a Stendent</p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: </p>
*
* @author ghq
* @version 1.0
*/
public class Applet1 extends Applet {
boolean isStandalone = false;
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
Panel UpperPanel = new Panel();
Panel LowerPanel = new Panel();
CardLayout cardLayout1 = new CardLayout();
Panel panel1 = new Panel();
BorderLayout borderLayout3 = new BorderLayout();
Panel panel2 = new Panel();
BorderLayout borderLayout4 = new BorderLayout();
Choice choice1 = new Choice();
Label label1 = new Label();
Label label2 = new Label();
Label label3 = new Label();
//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//Construct the applet
public Applet1() {}
//Initialize the applet
public void init() {
choice1.addItem("English");
choice1.addItem("Chinese");
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
this.setLayout(borderLayout2);
UpperPanel.setForeground(Color.lightGray);
LowerPanel.setForeground(Color.white);
LowerPanel.setLayout(cardLayout1);
panel1.setLayout(borderLayout3);
panel2.setForeground(Color.pink);
panel2.setLayout(borderLayout4);
panel1.setForeground(Color.white);
label1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));
label1.setForeground(Color.blue);
label1.setText(""Select a Language:"");
label2.setAlignment(Label.CENTER);
label2.setFont(new java.awt.Font("Dialog", Font.PLAIN, 24));
label2.setText(""Good Movning!"");
label3.setAlignment(Label.CENTER);
label3.setFont(new java.awt.Font("Dialog", Font.PLAIN, 24));
label3.setText(""早上好"");
choice1.addItemListener(new Applet1_choice1_itemAdapter(this));
this.add(UpperPanel, java.awt.BorderLayout.NORTH);
UpperPanel.add(label1);
UpperPanel.add(choice1);
this.add(LowerPanel, java.awt.BorderLayout.CENTER);
LowerPanel.add(panel1, "panel1");
LowerPanel.add(panel2, "panel2");
panel1.add(label2, java.awt.BorderLayout.CENTER);
panel2.add(label3, java.awt.BorderLayout.CENTER);
}
//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo() {
return null;
}
public void choice1_itemStateChanged(ItemEvent e) {
if ("English".equals(choice1.getSelectedItem())){
cardLayout1.show(LowerPanel,"panel1");
}
else if ("Chinese".equals(choice1.getSelectedItem())){
cardLayout1.show(LowerPanel,"panel2");
}
}
}
class Applet1_choice1_itemAdapter implements ItemListener {
private Applet1 adaptee;
Applet1_choice1_itemAdapter(Applet1 adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.choice1_itemStateChanged(e);
}
}


