`

Google Web Toolkit 和 Google App Engine 综合教程 界面篇

阅读更多

http://www.kylewu.net/

 

诸位还不清楚Google Web ToolkitGoogle App Engine是什么的同学,请移步这里,看我的综合教程 启蒙篇。
请装好Eclipse的插件,后面的程序都是以插件为准,用命令行的同学请自己注意。

创建Eclipse工程

3445125282 b4c2cde5bd o Google Web Toolkit 和 Google App Engine 综合教程 界面篇点击最左面的小图标就开始创建新的Web应用。我这里创建了一个名为kylewuidea的Project,包设为net.kylewu.idea,我们这里要同时使用Google Web Toolkit 和 Google App Engine,所以两个都要选择支持。确认后可以看到Eclipse为我们创建好了整个Project,结构见图。

3444307627 1b0ab58861 o Google Web Toolkit 和 Google App Engine 综合教程 界面篇3444307657 86ab8b604b o Google Web Toolkit 和 Google App Engine 综合教程 界面篇

Google Web Toolkit 部分

打开Kylewuidea.java,里面已经写好了一个事例程序,有兴趣的同学可以先熟悉一下。接下来删除这个文件里多余的代码,仅保留下面这些。

 

package net.kylewu.idea.client;

import com.google.gwt.core.client.EntryPoint;

/**
 * Entry point classes define onModuleLoad().
 */
public class MyIdeaStorm implements EntryPoint {

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {

    }
}

 

下面我们就要往里面填东西了,同学们来看一下页面的结构,一个表格,包括了IdeaId,Idea主题,Idea详情,Idea完成进度及完成时间,按钮,备注。最后有一个添加Idea按钮,用来加入Idea。结构清晰了,就来写代码吧。

 

package net.kylewu.idea.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * Entry point classes define onModuleLoad().
 */
public class MyIdeaStorm implements EntryPoint {

    private FlexTable table = new FlexTable();

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {
        // Initial all items.
        init();
        // Add table to html page.
        RootPanel.get("idea").add(createBasePanel());
        // Initial table.
        importFromDatabase();
    }

    private void init() {
        // TODO Initial table structure.
        // TODO Set table attribute.
    }
    private void importFromDatabase() {
        // TODO Add initial data to table or get from database.

    }
    private Panel createBasePanel() {
        // Base Panel of this project.
        VerticalPanel mainPanel = new VerticalPanel();
        // TODO Add click handler to add button.
        // TODO Assemble the panel.

        return mainPanel;
    }
}

 

 

onModuleLoad()方法就是程序的入口,这里我们写了一下初始化的代码。我在这里是直接写成方法了,这样看入口感觉清爽一些。

写Google Web Toolkit的代码与写普通Java界面很相似,在Panel里加入一些组件。这里要注意,RootPanel.get()方法得到的就是HTML页面中的某个元素,也就是我们的最上级容器。在这里我get名为idea的panel,那么它到底在什么地方呢?

打开war/Kylewuidea.html,删除body内除iframe的所有内容,改为如下代码。

1
<h1>Kyle Wu's Idea</h1>

看到了么,我们将一个div命名为idea,这样我们Project都会在这个div标签下,当然,你也可以get到其他的元素。

到这里页面中还没有任何元素,下面任务很简单了。点击添加Idea的按钮,弹出一个对话框,可以填入主题和详情等。当我们点击添加Idea的时候,一条新的Idea将显示在表格中。对于每条idea,都需要更新或者删除,功能应该不难了吧,同学们可以自己写写看。

Google Web Toolkit 的任务差不多了,让我们看看最后的代码。

package net.kylewu.idea.client;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.kylewu.idea.client.service.DBWorkerService;
import net.kylewu.idea.client.service.DBWorkerServiceAsync;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * Entry point classes define onModuleLoad().
 */
public class Kylewuidea implements EntryPoint {

    private final int COL_ID = 0;
    private final int COL_SUBJECT = 1;
    private final int COL_DETAIL = 2;
    private final int COL_PROGRESS = 3;
    private final int COL_TIME = 4;
    private final int COL_OPERATION = 5;

    private FlexTable table = new FlexTable();

    private ArrayList subjectList = new ArrayList();

    private Map mapStrToInt = new HashMap();
    private Map mapIntToStr = new HashMap();

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {

        // Initial all items.
        init();
        // Add table to html page.
        RootPanel.get("ideastorm").add(createBasePanel());
        // Initial table.
        importFromDatabase();

    }

    private void init() {

        mapStrToInt.put("0%", 0);
        mapStrToInt.put("25%", 1);
        mapStrToInt.put("50%", 2);
        mapStrToInt.put("75%", 3);
        mapStrToInt.put("100%", 4);
        mapIntToStr.put(0, "0%");
        mapIntToStr.put(1, "25%");
        mapIntToStr.put(2, "50%");
        mapIntToStr.put(3, "75");
        mapIntToStr.put(4, "100%");

        // Initial table structure.
        table.setText(0, COL_ID, "ID");
        table.setText(0, COL_SUBJECT, "Subject");
        table.setText(0, COL_DETAIL, "Detail");
        table.setText(0, COL_PROGRESS, "Progress");
        table.setText(0, COL_OPERATION, "Operation");
        table.setText(0, COL_TIME, "Time");

        // Set table attribute.
        table.setCellPadding(5);
        table.getColumnFormatter().setWidth(0, "10");
        table.getColumnFormatter().setWidth(1, "200");
        table.getColumnFormatter().setWidth(2, "400");
        table.getColumnFormatter().setWidth(3, "150");
        table.getColumnFormatter().setWidth(4, "100");
    }

    /**
     * Initial table data
     */
    private void importFromDatabase() {
        // Get exist ideas from db
    }

    /**
     * Create base panel
     *
     * @return
     */
    private Panel createBasePanel() {
        // Base Panel of this project.
        VerticalPanel mainPanel = new VerticalPanel();
        Button btnAdd = new Button("Add Idea");

        // Add click handler to add button.
        btnAdd.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                // Show Add Idea Dialog
                showIdeaEditDialog(true, -1);
            }
        });

        // Assemble the panel.
        mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        mainPanel.add(table);
        mainPanel.add(btnAdd);

        return mainPanel;
    }

    /**
     * Show Add Idea Dialog
     */
    private void showIdeaEditDialog(final boolean isNew, final int index) {
        // Initial Add Idea Dialog.
        final DialogBox dialog = new DialogBox();
        final TextBox txtBoxSubject = new TextBox();
        final TextArea txtAreaDetail = new TextArea();
        final ListBox listBox = new ListBox();
        VerticalPanel dialogPanel = new VerticalPanel();
        HorizontalPanel itemPanel = new HorizontalPanel();
        Button btnInsert = new Button();
        Button btnClose = new Button("Close");

        // Set attribute.
        dialog.setText("Input your idea");
        dialog.setAnimationEnabled(true);
        txtAreaDetail.setSize("300", "380");
        listBox.clear();
        listBox.addItem("0%");
        listBox.addItem("25%");
        listBox.addItem("50%");
        listBox.addItem("75%");
        listBox.addItem("100%");
        listBox.setVisibleItemCount(5);

        if (isNew) {
            btnInsert.setText("Insert");
            txtBoxSubject.setText("Input your indea");
            listBox.setSelectedIndex(0);
        } else {
            btnInsert.setText("Update");
            txtBoxSubject.setText(table.getText(index, COL_SUBJECT));
            txtAreaDetail.setText(table.getText(index, COL_DETAIL));
            listBox.setSelectedIndex(mapStrToInt.get(table.getText(index,
                    COL_PROGRESS)));
            if (table.getText(index, COL_PROGRESS).compareTo("100%") == 0  )
                listBox.setEnabled(false);
        }

        // Add ClickHandler to Insert button
        btnInsert.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                // Check empty
                if (txtBoxSubject.getText().length() == 0
                        || txtAreaDetail.getText().length() == 0)
                    return;
                // Check exist
                if (subjectList.contains(txtBoxSubject.getText()) == true
                        &amp;&amp; isNew) {
                    return;
                }

                insertIdeaIntoTable(index, "", txtBoxSubject.getText(), txtAreaDetail.getText(),
                        mapIntToStr.get(listBox.getSelectedIndex()), "");
                dialog.hide();
            }

        });

        // Add ClickHandler to Close button
        btnClose.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                dialog.hide();
            }
        });

        // Assemble dialog panel.
        itemPanel.setWidth("100%");
        itemPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
        itemPanel.add(listBox);
        itemPanel.add(btnInsert);
        itemPanel.add(btnClose);
        dialogPanel.add(txtBoxSubject);
        dialogPanel.add(txtAreaDetail);
        dialogPanel.add(itemPanel);

        // Associate the dialog with the panel.
        dialog.setWidget(dialogPanel);

        // Show dialog.
        dialog.center();
    }

    private void insertIdeaIntoTable(int index, final String id,
            final String subject, String detail, String progress, String date) {
        //
        if (index == -1) {
            index = table.getRowCount();
            subjectList.add(subject);
        } else {
            subjectList.set(index - 1, subject);
        }

        HorizontalPanel panel = new HorizontalPanel();
        Button btnUpdate = new Button("Update");
        Button btnRemove = new Button("Remove");

        // Add handler to buttons
        btnUpdate.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                int i = subjectList.indexOf(subject);
                showIdeaEditDialog(false, i + 1);
            }

        });

        btnRemove.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                // Remove

            }

        });

        panel.add(btnUpdate);
        panel.add(btnRemove);

        table.setWidget(index, COL_OPERATION, panel);
        table.setText(index, COL_ID, id);
        table.setText(index, COL_SUBJECT, subject);
        table.setText(index, COL_DETAIL, detail);
        table.setText(index, COL_PROGRESS, progress);
        if (progress.compareTo("100%") == 0 &amp;&amp; table.getText(index, COL_TIME).length() == 0) {
            table.setText(index, COL_TIME, date);
        }

    }
}

 

好奇的同学肯定会问,光写Google Web Toolkit 的东西了,怎么不见Google App Engine 呢?呵呵,不要着急,休息,休息一下:) 在下一篇里将介绍Google App Engine 在我们这个应用里如何帮助诸位同学把idea存储起来。

分享到:
评论

相关推荐

    云应用开发 ——Google App Engine & Google Web Toolkit入门指南

    ### 云应用开发 ——Google App Engine & Google Web Toolkit入门指南 #### 第1章 应该了解下 ##### 1.1 云基本知识 云计算是一种通过互联网提供按需计算资源和服务的方式,包括网络、服务器、存储、应用程序和...

    google app Engine for java中文api

    Google App Engine for Java为Java开发者提供了一个全面而强大的云计算平台,不仅支持常见的Java Web开发技术,还引入了一系列创新特性,如自动伸缩、易于部署等,极大地降低了构建高性能Web应用的技术门槛。...

    Google Web Toolkit Tutorial

    ### Google Web Toolkit (GWT) 教程 #### 一、简介 Google Web Toolkit(GWT)是一款由Google开发的强大工具包,它不仅提供了一种简单的方法来构建和优化复杂的Web应用程序,还允许开发者使用Java语言进行前端开发...

    google app engine开发人员文档

    Google App Engine(GAE)是谷歌提供的一种云计算平台,它允许开发者构建并托管Web应用程序,无需管理和维护服务器硬件。这个平台支持多种编程语言,包括Python、Java、Go和PHP,为开发者提供了强大的服务,如数据...

    Myeclipse7,8下的插件安装.pdf下的GWT 和 google app engine 插件安装

    本篇将详细介绍如何在MyEclipse 7或8版本下安装GWT(Google Web Toolkit)和Google App Engine插件,以及如何从中学到其他插件的安装方法。 首先,让我们了解GWT和Google App Engine。GWT是一款由Google开发的开源...

    Google_App_Engine开发环境搭建

    Google App Engine for Java 是一个由 Google 提供的云计算平台,专为 Java 开发人员设计,让他们能够构建可伸缩的Web应用程序。自2009年4月起,这个平台开始支持Java,为开发者提供了丰富的服务和工具。本文将深入...

    Beginning Google Web Toolkit From Novice to Professional

    《初识Google Web Toolkit:从新手到专家》这本书是一本为所有层次的开发者设计的GWT(Google Web Toolkit)入门指南。GWT是Google推出的一个开源工具包,它允许开发者使用Java语言来编写Web应用程序,并自动编译成...

    Packtpub.Google.App.Engine.Java.and.GWT.Application.Development.Nov.2010

    《基于Google App Engine(GAE)的Java和GWT应用开发》这本书深入探讨了如何使用 Java 和 GWT 在 GAE 上构建强大且可扩展的 Web 应用程序。通过对 GAE 的介绍、Java 和 GWT 的应用技巧以及构建交互式 Web 应用程序的...

    com.google.gdt.eclipse.suite.4.3.zip

    3. **GWT (Google Web Toolkit)**:GWT是一个开源的Java框架,用于开发和优化高性能的JavaScript应用程序。通过GWT,开发者可以用Java编写前端代码,然后由GWT编译成高效的JavaScript,这大大简化了跨浏览器的Web...

    Ext + Gwt + Struts2.0开发2

    2. **使用New Web Application Project Wizard**:这个向导允许您创建一个新的使用Google Web Toolkit (GWT) 和/或 Google App Engine 的Web应用程序。 - 您可以选择项目名称和根包名。 - 项目的名称将用于生成...

    gwt-saas-contacts:具有GWT的Cloud Appengine联系人

    【标题】"gwt-saas-contacts:具有GWT的Cloud Appengine联系人" 提供了一个基于Google Web Toolkit(GWT)和Google Cloud Platform的App Engine服务的SaaS(Software as a Service)应用程序示例,专注于管理联系人...

    2021-2022年收藏的精品资料软件工程师谷歌八大热点新工具开发者必备.docx

    这款插件极大地简化了使用Google Web Toolkit和App Engine的Java开发,提供了一站式的开发、调试和部署解决方案,使得开发者能够快速启动项目。 七、Swiffy Extension Swiffy Extension将Adobe Flash内容转换为...

    MyEclipse10集成GWT

    同时,为了支持GWT的运行环境,还需要添加"Google App Engine Java SDK 1.7.5"和"Google Web Toolkit SDK 2.5.0"。通过点击右侧的绿色加号,将这三个组件都添加到待安装列表。 4. 安装过程的最后一步是点击右上角的...

    GAE开发环境(日文)

    Google App Engine(GAE)是Google提供的一个云平台,用于构建和托管Web应用程序。它支持两种编程语言:Java和Python。本指南将重点介绍如何在Java环境下设置Google App Engine的开发环境,特别是使用Eclipse IDE。 ...

    基于GAE平台与GWT框架的Android技术应用研究.pdf

    本文主要探讨了如何结合Google App Engine (GAE) 平台和Google Web Toolkit (GWT) 框架,在Android客户端进行应用开发。Google App Engine是一种云计算服务平台,提供分布式数据存储、海量数据处理和分布式数据库等...

    GWT开发文档

    3. **确认插件信息**:返回安装对话框,中心区域应已列出可选插件和SDK,勾选Google Plugin for Eclipse及相关的SDK复选框,这将安装插件、Google App Engine Java SDK和Google Web Toolkit SDK,然后点击“下一步”...

    Ext + Gwt + Struts2.0开发3

    取消不必要的Google App Engine支持,以保持项目的简洁性。调整项目的字符编码为UTF-8,确保编码一致性。 2. **调试Gwt项目**:运行项目,检查是否能正常启动。Gwt工具会自带Tomcat服务器,无需额外启动。正常运行...

    搭建简单的EXT-GWT(GXT)的开发环境

    在创建项目时,选择GWT 2.2.0作为版本,并取消Google App Engine的支持。这样你就有了一个基础的GWT项目。 为了运行项目并检查是否能正常显示,找到客户端包中的主Java类,右键点击并选择Run As -&gt; Web Application...

    GWT入门与经典实例解析

    GWT,全称为Google Web Toolkit,是Google推出的一款开源的JavaScript开发框架,旨在帮助Java开发者更高效地构建和优化复杂的、可伸缩的Web应用程序。GWT的核心理念是利用Java语言进行开发,并自动编译为优化过的...

Global site tag (gtag.js) - Google Analytics