- 浏览: 318016 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
flex_莫冲:
tks d
JAVA教材(推荐新手学习) -
magic_yao:
不错的简介
Python库 -
lzzzing:
import time
d = {1:1}
maxv,max ...
Project Euler 第14题 -
a173549010:
怎么资源被举报了,下不了
个人珍藏的MLDN李兴华J2EE视频教程(纳米盘下载) -
a173549010:
怎么下不了
个人珍藏的MLDN李兴华J2EE视频教程(纳米盘下载)
诸位还不清楚Google Web Toolkit 和 Google App Engine是什么的同学,请移步这里,看我的综合教程 启蒙篇。
请装好Eclipse的插件,后面的程序都是以插件为准,用命令行的同学请自己注意。
创建Eclipse工程
点击最左面的小图标就开始创建新的Web应用。我这里创建了一个名为kylewuidea的Project,包设为net.kylewu.idea,我们这里要同时使用Google Web Toolkit 和 Google App Engine,所以两个都要选择支持。确认后可以看到Eclipse为我们创建好了整个Project,结构见图。
Google Web Toolkit 部分
打开Kylewuidea.java,里面已经写好了一个事例程序,有兴趣的同学可以先熟悉一下。接下来删除这个文件里多余的代码,仅保留下面这些。
下面我们就要往里面填东西了,同学们来看一下页面的结构,一个表格,包括了IdeaId,Idea主题,Idea详情,Idea完成进度及完成时间,按钮,备注。最后有一个添加Idea按钮,用来加入Idea。结构清晰了,就来写代码吧。 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() {
}
}
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的所有内容,改为如下代码。
看到了么,我们将一个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 && 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 && table.getText(index, COL_TIME).length() == 0) { table.setText(index, COL_TIME, date); } } }
好奇的同学肯定会问,光写Google Web Toolkit 的东西了,怎么不见Google App Engine 呢?呵呵,不要着急,休息,休息一下:) 在下一篇里将介绍Google App Engine 在我们这个应用里如何帮助诸位同学把idea存储起来。
发表评论
-
Google Web Toolkit 和 Google App Engine 综合教程 交互篇
2009-08-15 15:45 2325http://www.kylewu.net/ 前 ... -
Google Web Toolkit 和 Google App Engine 综合教程 存储篇
2009-08-15 15:44 1942http://www.kylewu.net/ 前面已经 ... -
Google Web Toolkit 和 Google App Engine 综合教程 启蒙篇
2009-08-15 15:30 1508http://www.kylewu.net/ 什么是Goog ... -
Google App Engine for python中文教程
2009-05-18 13:47 18371很牛!用Google App Engine开发自己的pytho ...
相关推荐
### 云应用开发 ——Google App Engine & Google Web Toolkit入门指南 #### 第1章 应该了解下 ##### 1.1 云基本知识 云计算是一种通过互联网提供按需计算资源和服务的方式,包括网络、服务器、存储、应用程序和...
Google App Engine for Java为Java开发者提供了一个全面而强大的云计算平台,不仅支持常见的Java Web开发技术,还引入了一系列创新特性,如自动伸缩、易于部署等,极大地降低了构建高性能Web应用的技术门槛。...
### Google Web Toolkit (GWT) 教程 #### 一、简介 Google Web Toolkit(GWT)是一款由Google开发的强大工具包,它不仅提供了一种简单的方法来构建和优化复杂的Web应用程序,还允许开发者使用Java语言进行前端开发...
Google App Engine(GAE)是谷歌提供的一种云计算平台,它允许开发者构建并托管Web应用程序,无需管理和维护服务器硬件。这个平台支持多种编程语言,包括Python、Java、Go和PHP,为开发者提供了强大的服务,如数据...
本篇将详细介绍如何在MyEclipse 7或8版本下安装GWT(Google Web Toolkit)和Google App Engine插件,以及如何从中学到其他插件的安装方法。 首先,让我们了解GWT和Google App Engine。GWT是一款由Google开发的开源...
Google App Engine for Java 是一个由 Google 提供的云计算平台,专为 Java 开发人员设计,让他们能够构建可伸缩的Web应用程序。自2009年4月起,这个平台开始支持Java,为开发者提供了丰富的服务和工具。本文将深入...
《初识Google Web Toolkit:从新手到专家》这本书是一本为所有层次的开发者设计的GWT(Google Web Toolkit)入门指南。GWT是Google推出的一个开源工具包,它允许开发者使用Java语言来编写Web应用程序,并自动编译成...
《基于Google App Engine(GAE)的Java和GWT应用开发》这本书深入探讨了如何使用 Java 和 GWT 在 GAE 上构建强大且可扩展的 Web 应用程序。通过对 GAE 的介绍、Java 和 GWT 的应用技巧以及构建交互式 Web 应用程序的...
3. **GWT (Google Web Toolkit)**:GWT是一个开源的Java框架,用于开发和优化高性能的JavaScript应用程序。通过GWT,开发者可以用Java编写前端代码,然后由GWT编译成高效的JavaScript,这大大简化了跨浏览器的Web...
【标题】"gwt-saas-contacts:具有GWT的Cloud Appengine联系人" 提供了一个基于Google Web Toolkit(GWT)和Google Cloud Platform的App Engine服务的SaaS(Software as a Service)应用程序示例,专注于管理联系人...
这款插件极大地简化了使用Google Web Toolkit和App Engine的Java开发,提供了一站式的开发、调试和部署解决方案,使得开发者能够快速启动项目。 七、Swiffy Extension Swiffy Extension将Adobe Flash内容转换为...
同时,为了支持GWT的运行环境,还需要添加"Google App Engine Java SDK 1.7.5"和"Google Web Toolkit SDK 2.5.0"。通过点击右侧的绿色加号,将这三个组件都添加到待安装列表。 4. 安装过程的最后一步是点击右上角的...
Google App Engine(GAE)是Google提供的一个云平台,用于构建和托管Web应用程序。它支持两种编程语言:Java和Python。本指南将重点介绍如何在Java环境下设置Google App Engine的开发环境,特别是使用Eclipse IDE。 ...
本文主要探讨了如何结合Google App Engine (GAE) 平台和Google Web Toolkit (GWT) 框架,在Android客户端进行应用开发。Google App Engine是一种云计算服务平台,提供分布式数据存储、海量数据处理和分布式数据库等...
3. **确认插件信息**:返回安装对话框,中心区域应已列出可选插件和SDK,勾选Google Plugin for Eclipse及相关的SDK复选框,这将安装插件、Google App Engine Java SDK和Google Web Toolkit SDK,然后点击“下一步”...
在创建项目时,选择GWT 2.2.0作为版本,并取消Google App Engine的支持。这样你就有了一个基础的GWT项目。 为了运行项目并检查是否能正常显示,找到客户端包中的主Java类,右键点击并选择Run As -> Web Application...
GWT,全称为Google Web Toolkit,是Google推出的一款开源的JavaScript开发框架,旨在帮助Java开发者更高效地构建和优化复杂的、可伸缩的Web应用程序。GWT的核心理念是利用Java语言进行开发,并自动编译为优化过的...