`

GWT - GWT Designer开发Ajax应用 (06) - 常用控件使用

    博客分类:
  • GWT
 
阅读更多

http://blog.csdn.net/pathuang68/article/details/4272424

概要说明:

Tab、RadioButton和ComboBox的使用方法。


1.

创建一个GWT Java Project

 

图1

设定项目名称为:TestSeveralWidgets,点击Finish按钮:

 

 

图2

做一下工作:

- 选中Create GWT Module

- 将Module Name设为:TestSeveralWidgets

- 将Package Name设为:com.pnft.ajax

点击Finish按钮。

 

做完这些工作后,这个新建的项目大致是这样的:

 

图3

 

选中src目录,修改项目属性,使其字符集为UTF-8。因为后面我们要用到中文。 

注意:创建GWT Project的详细过程,请见GWT Designer04。

 

2. 新建一个Composite

 

图4

如下图将Composite的Name设定为:TestSeveralWidgetsComposite。

 

图5

点击Finish按钮。做完这些工作后Composite的情况大致如下:

 

图6

 

3. 切换到TestSeveralWidgetsComposite的Design视图

 

图7

 

选中Palette中的TabPanel,

 

图8

 

放置到Empty Composite上,得到:

 

图9

 

4. 在Palette中选中AbsolutePanel,

 

图10

 

将AbsolutePanel放置到步骤3中TabPanel上,得到:

 

图11

 

修改刚才放置的AbsolutePanel的属性:

 

图12

- variable:          absolutePanel1

- height:             300px

- styleName:     tabpanel

- tab title:            First Tab

 

 

其中,tabpanel是新增加的css,其内容如下图:

 

图13

注意在新增css时,前面的“.”不能去掉(如上图所示“.tabpanel”),但在程序中或者属性栏中,使用或显示的均是“tabpanel”,

比如,前面属性修改完成后,GWT Designer会在程序中自动为我们生成一些代码,其中有:

    absolutePanel1.setStyleName("tabpanel");

这就是在程序中引用css的方法。

 

5. 重复4,再增加一个tab(在红线处)

 

图14

其属性修改情况如下:

 

图15

 

6. 在First Tab (即absolutePanel1)上增加一个Label、一个TextBox和一个按钮:

 

图16

增加.gwt-button这个css

 

7. 在第二个Tab (即absolutePanel2)上增加6个Radio Button:

 

图17

6个RadioButton分成两组:

group1:

variable: radioButton1       text: 单选按钮一

variable: radioButton2       text: 单选按钮二

variable: radioButton3       text: 单选按钮三

group2:

variable: radioButton4       text: 单选按钮四

variable: radioButton5       text: 单选按钮五

variable: radioButton6       text: 单选按钮六

 

8. 继续在第二个Tab (即absolutePanel2)上增加一个ComboBox:

 

图18

variable:             comboBox

修改items属性:

 

图19

点击OK按钮。

 

预览一下我们的设计:

 

图20

 

9. 修改GWT Designer自动生成的代码。到目前为止,GWT Designer为我们生成了一下代码:

public class TestSeveralWidgetsComposite extends Composite

{

    public TestSeveralWidgetsComposite()

{

        final TabPanel tabPanel = new TabPanel();

        initWidget(tabPanel);

 

        final AbsolutePanel absolutePanel1 = new AbsolutePanel();

        tabPanel.add(absolutePanel1, "First Tab");

        absolutePanel1.setStyleName("tabpanel");

        absolutePanel1.setHeight("300px");

 

        final Label label = new Label("New Label");

        absolutePanel1.add(label, 38, 64);

 

        final TextBox textBox = new TextBox();

        absolutePanel1.add(textBox, 109, 58);

 

        final Button okButtonOK = new Button();

        absolutePanel1.add(okButtonOK, 276, 57);

        okButtonOK.setText("OK");

 

        final AbsolutePanel absolutePanel2 = new AbsolutePanel();

        tabPanel.add(absolutePanel2, "第二个Tab");

        absolutePanel2.setStyleName("tabpanel");

        absolutePanel2.setHeight("300px");

 

        final RadioButton radioButton1 = new RadioButton("group1");

        absolutePanel2.add(radioButton1, 39, 73);

        radioButton1.setText("单选按钮一");

 

        final RadioButton radioButton2 = new RadioButton("group1");

        absolutePanel2.add(radioButton2, 39, 98);

        radioButton2.setText("单选按钮二");

 

        final RadioButton radioButton3 = new RadioButton("group1");

        absolutePanel2.add(radioButton3, 39, 123);

        radioButton3.setText("单选按钮三");

 

        final RadioButton radioButton4 = new RadioButton("group2");

        absolutePanel2.add(radioButton4, 246, 73);

        radioButton4.setText("单选按钮四");

 

        final RadioButton radioButton5 = new RadioButton("group2");

        absolutePanel2.add(radioButton5, 246, 98);

        radioButton5.setText("单选按钮五");

 

        final RadioButton radioButton6 = new RadioButton("group2");

        absolutePanel2.add(radioButton6, 246, 123);

        radioButton6.setText("单选按钮六");

 

        final ListBox comboBox = new ListBox();

        absolutePanel2.add(comboBox, 39, 181);

        comboBox.addItem("");

        comboBox.addItem("谁家玉笛暗飞声,");

        comboBox.addItem("散入春风满洛城。");

        comboBox.addItem("此夜曲中闻折柳,");

        comboBox.addItem("何人不起故园情。");

        comboBox.addItem("一树寒梅白玉条,");

        comboBox.addItem("迥邻村路傍溪桥。");

        comboBox.addItem("不知近水花先发,");

        comboBox.addItem("疑是经冬雪未消。");

        comboBox.addItem("湖光秋月两相和,");

        comboBox.addItem("潭面无风镜未磨。");

        comboBox.addItem("遥望洞庭山水翠,");

        comboBox.addItem("白银盘里一青螺。");

        comboBox.setWidth("287px");

        tabPanel.selectTab(0);

    }

}

 

修改上面的代码,将所有widget从构造方法TestSeveralWidgetsComposite中提出来,使其作为类的私有成员变量,修改后的代码如下:

public class TestSeveralWidgetsComposite extends Composite

{

    private TabPanel tabPanel;

    private AbsolutePanel absolutePanel1;

    private Label label;

    private TextBox textBox;

    private Button okButtonOK;

    private AbsolutePanel absolutePanel2;

    private RadioButton radioButton1;

    private RadioButton radioButton2;

    private RadioButton radioButton3;

    private RadioButton radioButton4;

    private RadioButton radioButton5;

    private RadioButton radioButton6;

    private ListBox comboBox;

 

    public TestSeveralWidgetsComposite()

    {

        tabPanel = new TabPanel();

        initWidget(tabPanel);

 

        absolutePanel1 = new AbsolutePanel();

        tabPanel.add(absolutePanel1, "First Tab");

        absolutePanel1.setStyleName("tabpanel");

        absolutePanel1.setHeight("300px");

 

        label = new Label("New Label");

        absolutePanel1.add(label, 38, 64);

 

        textBox = new TextBox();

        absolutePanel1.add(textBox, 109, 58);

 

        okButtonOK = new Button();

        absolutePanel1.add(okButtonOK, 276, 57);

        okButtonOK.setText("OK");

 

        absolutePanel2 = new AbsolutePanel();

        tabPanel.add(absolutePanel2, "第二个Tab");

        absolutePanel2.setStyleName("tabpanel");

        absolutePanel2.setHeight("300px");

 

        radioButton1 = new RadioButton("group1");

        absolutePanel2.add(radioButton1, 39, 73);

        radioButton1.setText("单选按钮一");

 

        radioButton2 = new RadioButton("group1");

        absolutePanel2.add(radioButton2, 39, 98);

        radioButton2.setText("单选按钮二");

 

        radioButton3 = new RadioButton("group1");

        absolutePanel2.add(radioButton3, 39, 123);

        radioButton3.setText("单选按钮三");

 

        radioButton4 = new RadioButton("group2");

        absolutePanel2.add(radioButton4, 246, 73);

        radioButton4.setText("单选按钮四");

 

        radioButton5 = new RadioButton("group2");

        absolutePanel2.add(radioButton5, 246, 98);

        radioButton5.setText("单选按钮五");

 

        radioButton6 = new RadioButton("group2");

        absolutePanel2.add(radioButton6, 246, 123);

        radioButton6.setText("单选按钮六");

 

        comboBox = new ListBox();

        absolutePanel2.add(comboBox, 39, 181);

        comboBox.addItem("");

        comboBox.addItem("谁家玉笛暗飞声,");

        comboBox.addItem("散入春风满洛城。");

        comboBox.addItem("此夜曲中闻折柳,");

        comboBox.addItem("何人不起故园情。");

        comboBox.addItem("一树寒梅白玉条,");

        comboBox.addItem("迥邻村路傍溪桥。");

        comboBox.addItem("不知近水花先发,");

        comboBox.addItem("疑是经冬雪未消。");

        comboBox.addItem("湖光秋月两相和,");

        comboBox.addItem("潭面无风镜未磨。");

        comboBox.addItem("遥望洞庭山水翠,");

        comboBox.addItem("白银盘里一青螺。");

        comboBox.setWidth("287px");

        tabPanel.selectTab(0);

    }

}

这样做的好处是,如果在类中增加了其他方法,那么其他方法也可以访问到这些widget,而前面那种方法是不方便的。

 

 

 

10. 增加单选按钮消息处理方法

 

图21

GWT Designer将自动生成下面带下划线的代码:

        radioButton1 = new RadioButton("group1");

        absolutePanel2.add(radioButton1, 39, 73);

        radioButton1.addClickListener(new ClickListener()

        {

            public void onClick(final Widget sender)

            {

            }

        });

        radioButton1.setText("单选按钮一");

 

可以采用同样的方法,给其他Widget增加消息处理方法。

 

但我们也可以采用另外一种方式,即将上面的代码带下划线的部分改为下面带下划线的代码:

        radioButton1 = new RadioButton("group1");

        absolutePanel2.add(radioButton1, 39, 73);

        radioButton1.addClickListener(this);

        radioButton1.setText("单选按钮一");

 

这时MyEclipse认为有问题了:

 

图22

选中最后一条,即“Let ‘TestSeveralWidgetsComposite’ implement ‘ClickListener’”,就是说让类

TestSeveralWidgetsComposite实现接口ClickListener。

 

但到此MyEclipse还是在提示问题,这是因为接口ClickListener中由一个onClick方法,TestSeveralWidgetsComposite类必须要实现它。

 

图23

选择“Add unimplemented methods”,

 

图24

注意:去掉@Override这个annotation,GWT 1.4.62(支持jdk1.4-)不支持java1.5中开始有的标注特性。

 

到此,MyEclipse不提示错误信息了。现在为radioButton2 ~ 6增加消息监听器,就像radioButton1那样:

    …

    radioButton2.addClickListener(this);

         ...

    radioButton2.addClickListener(this);

         ...

radioButton2.addClickListener(this);

         ...

    radioButton2.addClickListener(this);

         ...

    radioButton2.addClickListener(this);

         …

 

修改类的onClick方法,使之如下:

    public void onClick(Widget sender)

    {

        if(sender == radioButton1)

        {

            if(radioButton1.isChecked())

            {

                Window.alert("RadioButton1 is checked...");

            }

        }

        else if(sender == radioButton2)

        {

            if(radioButton2.isChecked())

            {

                Window.alert("RadioButton2 is checked...");

            }

        }

        else if(sender == radioButton3)

        {

            if(radioButton3.isChecked())

            {

                Window.alert("RadioButton3 is checked...");

            }

        }

        else if(sender == radioButton4)

        {

            if(radioButton4.isChecked())

            {

                Window.alert("RadioButton4 is checked...");

            }

        }

        else if(sender == radioButton5)

        {

            if(radioButton5.isChecked())

            {

                Window.alert("RadioButton5 is checked...");

            }

        }

        else if(sender == radioButton6)

        {

            if(radioButton6.isChecked())

            {

                Window.alert("RadioButton6 is checked...");

            }

        }

    }

 

 

11. 增加comboBox的消息处理方法

 

图25

增加了下面带下划线的代码(当然也可以象10中那样进行处理):

        comboBox = new ListBox();

        absolutePanel2.add(comboBox, 39, 181);

        comboBox.addChangeListener(new ChangeListener()

        {

            public void onChange(final Widget sender)

            {

            }

        });

        comboBox.addItem("");

        comboBox.addItem("谁家玉笛暗飞声,");

        comboBox.addItem("散入春风满洛城。");

        comboBox.addItem("此夜曲中闻折柳,");

        comboBox.addItem("何人不起故园情。");

        comboBox.addItem("一树寒梅白玉条,");

        comboBox.addItem("迥邻村路傍溪桥。");

        comboBox.addItem("不知近水花先发,");

        comboBox.addItem("疑是经冬雪未消。");

        comboBox.addItem("湖光秋月两相和,");

        comboBox.addItem("潭面无风镜未磨。");

        comboBox.addItem("遥望洞庭山水翠,");

        comboBox.addItem("白银盘里一青螺。");

        comboBox.setWidth("287px");

 

         修改上面带下划线的代码为:

        comboBox.addChangeListener(new ChangeListener()

        {

            public void onChange(final Widget sender)

            {

                int i = comboBox.getSelectedIndex();

                String z = comboBox.getItemText(i);

                Window.alert("Item " + i + "'s text is " + z);

            }

        });

 

 

12. 注意,两个不同Tab之间的Widget的variable必须唯一,不可重复。如在Tab1中有一个Widget对应的variable是“button”,那么在Tab2中就不可能有另外Widget对应的variable是“button”。

 

13. 将Tab1中的textBox,Tab2中的6个RadioButton和CombBox等Widget,用类似下图所示的方法进行Expose,这样就会让引用TestSeveralWidgetsComposite这个控件的其他应用,对TestSeveralWidgetsComposite中被Expose了的widget直接进行存取(见16)。

 

图26

到此,整个Composite的开发工作告一段落。

 

14. 在TestSeveralWidgets类中引用上面开发好的TestSeveralWidgetsComposite。

 

图27

点击Palette中的Choose Widget,

如下图,输入TestSeveralWidgetsComposite的名字,还未输入完成的时候,便可以在下面的文本框中看到我们想要引用的TestSeveralWidgetsComposite,选中它,

 

图28

点击OK按钮,在适当位置放置TestSeveralWidgetsComposite,如下图:

 

图29

调整TestSeveralWidgetsComposite的大小和位置,使之如下:

 

图30

这将会在TestSeveralWidgets类中的onModuleLoad方法的最后增加以下代码:

final TestSeveralWidgetsComposite testSeveralWidgetsComposite = new

TestSeveralWidgetsComposite();

        rootPanel.add(testSeveralWidgetsComposite, 10, 10);

        testSeveralWidgetsComposite.setSize("580px", "358px");

 

修改上面的代码,将testSeveralWidgetsComposite作为类的私有成员。修改后TestSeveralWidgets类的代码如下:

public class TestSeveralWidgets implements EntryPoint

{

    private TestSeveralWidgetsComposite testSeveralWidgetsComposite;

    private Button clickMeButton;

 

    public void onModuleLoad()

    {

        RootPanel rootPanel = RootPanel.get();

 

        clickMeButton = new Button();

        rootPanel.add(clickMeButton, 265, 380);

        clickMeButton.setText("Click me!");

        clickMeButton.addClickListener(new ClickListener()

        {

            public void onClick(Widget sender)

            {

                Window.alert("Hello, GWT World!");

            }

        });

 

        testSeveralWidgetsComposite = new TestSeveralWidgetsComposite();

        rootPanel.add(testSeveralWidgetsComposite, 10, 10);

        testSeveralWidgetsComposite.setSize("580px", "358px");

    }

 

15. 在hosted mode下的运行结果:

 

图31 

 

图32

  

图33

 

图34

应用的表现和我们预想的完全一致。

 

16. 增加Clickme按钮的代码,使得当点击Click Me按钮时,能够将Tab1 和Tab2中的Widget的状态合在一起显示出来。修改后整个TestSeveralWidgets类的代码如下:

public class TestSeveralWidgets implements EntryPoint

{

    private TestSeveralWidgetsComposite testSeveralWidgetsComposite;

    private Button clickMeButton;

 

    public void onModuleLoad()

    {

        RootPanel rootPanel = RootPanel.get();

 

        clickMeButton = new Button();

        rootPanel.add(clickMeButton, 265, 380);

        clickMeButton.setText("Click me!");

        clickMeButton.addClickListener(new ClickListener()

        {

            public void onClick(Widget sender)

            {

                String summary;

                // 获取Tab1中的文本框中的文字

                summary = testSeveralWidgetsComposite.getTextBox().getText();

                // 获取RadioButton 1~6的状态,未考虑代码之优雅程度

                if(testSeveralWidgetsComposite.getRadioButton1().isChecked()) summary +=

"/nRadio Button 1 is checked.";

                if(testSeveralWidgetsComposite.getRadioButton2().isChecked()) summary +=

"/nRadio Button 2 is checked.";

                if(testSeveralWidgetsComposite.getRadioButton3().isChecked()) summary +=

"/nRadio Button 3 is checked.";

                if(testSeveralWidgetsComposite.getRadioButton4().isChecked()) summary +=

"/nRadio Button 4 is checked.";

                if(testSeveralWidgetsComposite.getRadioButton5().isChecked()) summary +=

"/nRadio Button 5 is checked.";

                if(testSeveralWidgetsComposite.getRadioButton6().isChecked()) summary +=

"/nRadio Button 6 is checked.";

 

                // 获取ComboBox中被选中Item的index

                int index = testSeveralWidgetsComposite.getComboBox().getSelectedIndex();

                // 获取ComboBox中被选中Item的text,并加入到summary中

                summary += "/n" +

testSeveralWidgetsComposite.getComboBox().getItemText(index);

 

                Window.alert(summary);

            }

        });

 

        testSeveralWidgetsComposite = new TestSeveralWidgetsComposite();

        rootPanel.add(testSeveralWidgetsComposite, 10, 10);

        testSeveralWidgetsComposite.setSize("580px", "358px");

    }

}

 

17. 再次在hosted mode下运行。

 

图35

如下图,在First Tab中输入“玄机逸士之武功研究”

 

图36

点击“第二个Tab”,并做出如下图所示的选择: 

 

图37

点击Click me!按钮,得到:

 

图38

所得结果和预想相同。

 

18. 部署到Tomcat6上,并在IE6和FireFox3中运行。

 

图39

 

图40

点击OK按钮,开始部署。下图是部署成功后的情形:

 

图41

 

启动Tomcat6,如果还没有启动的话。

 

 

IE中的运行结果:

 

图42

点击“第二个Tab”,并做出如下图所示的选择:

 

图43

点击Click me!按钮,得到:

 

图44

结果正确。

 

FireFox3中的运行结果与上相同,略。

分享到:
评论

相关推荐

    gwt-servlet-2.3.0.jar

    `gwt-servlet-2.3.0.jar`是GWT 2.3.0版本的Servlet库,这个库包含了运行GWT应用所需的服务器端组件。 在GWT的应用程序中,客户端部分通常由JavaScript代码生成,这些代码是由Java源代码通过GWT编译器编译得到的。...

    GWT-Ext 控件演示

    GWT-Ext 控件演示 GWT-Ext 控件演示

    gwt-dev-plugin-x86-对ie浏览器使用

    标题中的"gwt-dev-plugin-x86-对ie浏览器使用"指的是一个特定的GWT开发插件,适用于x86架构的机器,并且是专为Internet Explorer(IE)浏览器设计的。在GWT的早期版本中,为了实现Java到JavaScript的编译和在浏览器...

    gwt-2.5.1.zip

    当应用开发完成后,使用GWT的编译器将Java代码编译成优化过的JavaScript,以供生产环境使用。运行`gwt Compile`命令,生成的文件可以直接部署到Web服务器。 8. **优化与性能**: GWT提供了各种优化选项,如代码...

    Firefox26 和 GWT-Dev_plugin firefox26

    4. 示例项目:可能包含一个简单的GWT应用,用于演示如何在Firefox 26中使用GWT-Dev_plugin进行开发和调试。 5. 常见问题解答(FAQ):列出了一些用户在使用过程中可能遇到的问题及其解决方案。 总的来说,这个...

    GWT-Developer-Plugin

    GWT-Developer-Plugin

    GWT-Dev_plugin firefox26 免费下载,GWT 火狐插件

    **GWT-Dev Plugin** 是GWT开发过程中必不可少的一个组件,它是一个浏览器插件,主要用于在开发阶段支持GWT应用的调试。GWT-Dev Plugin对于火狐浏览器来说,就像Chrome或Safari浏览器中的GWT Development Mode插件,...

    gwt-maven-archetype source code

    描述中提到的链接指向了一篇博客文章,尽管具体内容没有给出,但我们可以推测这篇文章可能提供了关于如何使用 gwt-maven-archetype 的指南或教程。通常,这样的archetype 是一个预定义的项目结构,开发者可以基于它...

    Gwt-ext学习笔记之基础篇

    为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1. **下载与解压** - 访问[CypalStudio]...

    gwt-ext培训教程

    本教程将深入探讨GWT-Ext的核心概念、使用方法以及实际开发中的应用。 1. **GWT-Ext简介** GWT-Ext是GWT的一个扩展,它引入了大量桌面级应用的UI组件,如表格、树形视图、按钮、面板等,使得在Web应用中实现复杂...

    gwt-dev-plugin for IE、FireFox、Chrome

    GWT(Google Web Toolkit)是一款强大的开源JavaScript开发工具,它允许开发者使用Java语言来编写Web应用。GWT Dev Plugin是与GWT配套的浏览器插件,专为开发和调试GWT应用程序而设计。这款插件支持包括IE、Firefox...

    Gwt-Ext基础-中级-进阶

    3. **状态管理**:了解如何使用Gwt-Ext的Store和Model来管理应用程序的状态,包括数据的加载、存储和同步。 4. **事件处理**:深入研究Gwt-Ext的事件模型,学习如何监听和响应各种组件事件,以及如何自定义事件。 ...

    gwt-ext相关jar包及资源

    你需要将它们添加到你的项目的类路径中,以便在开发过程中引用和使用GWT-Ext的功能。例如,`gwt-ext.jar`可能是核心库,`gxt-sources.jar`可能包含源代码便于查看和学习,`gxt-theme-neptune.jar`可能是特定主题的...

    gwt-dev-plugin

    gwt-dev-plugin

    gwt-ext-tree

    在实际开发中,`exttree` 文件可能是这个库的一个示例或者实现文件,包含了使用 GWT-Ext-Tree 创建树形结构的代码。通过对这个文件的学习和理解,开发者可以更好地掌握如何在项目中集成和使用 GWT-Ext-Tree 组件。 ...

    Gwt-ext学习笔记

    GWT(Google Web Toolkit)和Ext JS是两个在Web开发领域广泛应用的技术,它们结合形成的Gwt-ext库,为开发者提供了一种构建富客户端应用程序的强大工具。这篇学习笔记将深入探讨Gwt-ext的核心概念、功能以及如何在实际...

    gwt-2.0.3.rar

    GWT,全称为Google Web Toolkit,是一个开源的Java开发框架,由Google开发并维护,用于...如果你正在寻找这个特定的版本,"gwt-2.0.3"的压缩包将提供你需要的所有文件,包括库、文档和其他资源,以便于你在项目中使用。

    gwt-dev-2.7.0-beta1.zip

    标题 "gwt-dev-2.7.0-...综上所述,"gwt-dev-2.7.0-beta1.zip" 和 "android-logger.zip" 分别提供了Web应用开发工具和Android日志记录解决方案,它们都是开源项目,鼓励社区参与和协作,对于开发者来说是宝贵的资源。

Global site tag (gtag.js) - Google Analytics