GXT之旅
解开GWT的神秘面纱,她只是一组比较基本的控件集。这远远不能够满足开发人员的需要,去搭建一个企业级的应用。所幸,GWT是一个开源的并且扩展性强的项目。为了弥补她的不足,有不少与之相关的项目孕育而生,ExtGWT就是她们其中之一。
茜茜770
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
GXT之旅:项目源码下载
项目源码下载好久不研究GXT了。。。有很多人私信问我要源码,今天才贴上来,不好意思哦:eclipse导入,配置build path,就可以让项目跑起来了(由于GWT和GXT的jar包太大了,所以就删除了。相信大家会自动添加进来)http://download.csdn.net/detail/miqi770/8100911原创 2014-10-31 09:35:40 · 1891 阅读 · 2 评论 -
GXT之旅:第九章:Charts图表——各种Chart(4)
AreaChart classAreaChart extends LineChart ,因此工作方式都是相同的。不同之处是替换了单独的丝线,变成了线性区域。AreaChart germanyChartConfig = new AreaChart();germanyChartConfig.addValues(68376,72815,78169,78289,79433,82075);g原创 2012-05-24 12:04:14 · 2846 阅读 · 6 评论 -
GXT之旅:第九章:Charts图表——各种Chart(3)
CylinderBarChart classBarChart chartConfig = new CylinderBarChart();chartConfig.addValues(6936,8628,41832,68376,296,10114,4693);FilledBarChart classFilledBarChart看起来和标准的BarChart没什么两样。但是她可原创 2012-05-14 17:32:03 · 3708 阅读 · 0 评论 -
GXT之旅:第九章:Charts图表——BarChart(2)
ChartModel classchartModel extends BaseModel,为 "Open Flash Chart" chart 的数据源所用。ChartModuel 用来定义类型和数据,他会包含一个or多个ChartConfig对象用来定义各种类型的Chart。ChartConfig classChartConfig extends BaseModel 但是一个原创 2012-05-11 14:09:54 · 2186 阅读 · 0 评论 -
GXT之旅:第九章:Charts图表——Chart的基本创建(1)
Chart class作为一个java类,Chart其实就是针对Open Flash Chart 库做了包装,并且让用户在使用起来就像其他的GXT的components一样。需要注意的是,在使用Chart的时候,需要给定一个open-flash-chart.swf的URL地址——上一节,我们拷入到RSSReader项目里面的地址。当然URL必须有效,否则Chart不会被渲染出来,除了控制室原创 2012-05-09 17:06:52 · 2700 阅读 · 0 评论 -
GXT之旅:第九章:Charts图表——准备工作
第九章:Charts本章我们要了解GXT的Chart功能。我们会全面了解Chart。为了消除对Chart功能的疑惑,我们会使用真实的数据展示Chart。我们会涉及到如下GXt功能集ChartChartModelChartConfigBarChartCylinderBarChartFilledBarChartSketchBarChartHorizont原创 2012-05-09 14:37:08 · 2518 阅读 · 1 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(3)
Overview其实对于Portlet来说,他适合作为一个summary的显示效果。先前的章节里面,我们使用过FeedOverviewView来显示一个feed的summary信息。现在我们就要新建一个OverviewPortlet包含FeedOverviewView。新建OverviewPortlet:package com.danielvaughan.rssreader.cli原创 2012-05-07 14:24:54 · 1887 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(2)
接着上节,我们按照同样的方式,允许用户可以拖动objects从FeedPortlet的ItemGrid移动到ItemPortlet里显示其内容。首先,RSSReaderConstants类,定义恒量——ITEM_DD_GROUP,用来作为drag-drop的grouppublic static final String ITEM_DD_GROUP = "itemDDGroup";原创 2012-04-26 17:53:30 · 1468 阅读 · 2 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Drag-Drop重构(1)
Drag-Drop重构我们现在针对RSSReader项目,使用Drag-Drop的Portal布局效果。下面就开始使用GXT内建好的DragSource和DropTarget。首相,我们要做的是允许用户可以从NavPortlet中FeedList的里面拖拽一条feed,然后可以放置到FeedPortlet,接下来其feed的内容会自动的通过ItemGrid显示出来。RSSReade原创 2012-04-26 15:37:07 · 1556 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——拖拽(Drag-Drop)基本介绍
Drag-Drop拖拽是GXt另外一个内建的有用的功能。正如GXT的其他功能一样,拖拽功能更接近桌面应用程序的特点。GXT的大多数components都支持拖拽功能,但是想要使用此功能,必须实现Draggable。DraggableDraggable类是用来给任何的components增加拖拽功能用的。使用起来很简单,比如我们像让一个Button是可被拖拽的,我们会有如下操作:原创 2012-04-24 17:27:01 · 2130 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(3)
按照上一节的思路,我们来继续重构feed和item区域新建两个恒量,在RSSReaderConstants类里,加入两个新的恒量——FEED_PORTLET 和 ITEM_PORTLETpublic static final String FEED_PORTLET = "feedPortlet";public static final String ITEM_PORTLET原创 2012-04-23 15:49:27 · 1453 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(2)
实际上,Portlet components并不是那么复杂,大多数的工作,我们在上一节都完成了,Portlet其实只是一个包装。新建包:com.danielvaughan.rssreader.client.portlets。在此包下,新建类NavPortlet extends Portlet(负责左侧导航区域)package com.danielvaughan.rssreader.原创 2012-04-23 15:05:39 · 1555 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——项目使用Portal重构(1)
目前,我们的RSSReader项目里,使用的是ContentPanel容器和BorderLayout布局效果。接下来,我们要做稍微的调整,将ContentPanel替换为Portlet,然后使用Portal去管理他们。Portlet是一个非常理想的components,用来构成独立的,不受他人影响的用户接口。不仅仅可以统一的被Portal管理,我们还可以使用MVC,让Portal响应每一个原创 2012-04-23 14:16:55 · 1570 阅读 · 0 评论 -
GXT之旅:第八章:Portal&Drag-Drop——Portal的基本介绍
第八章:Portal&Drag-Drop本章我们要了解GXT的Portal&Drag-Drop功能。我们会首先学习如何使用Portal(非常类似谷歌的iGoogle功能)布局和Portlet,然后再以实践的方式学习GXT的拖拽功能。我们会涉及到如下GXt功能集PortalPortletDraggableDragSourceGridDropTargetLi原创 2012-04-23 12:03:20 · 2268 阅读 · 0 评论 -
GXT之旅:第七章:MVC——Status toolbar
一个AppEvent不仅仅可以被一个Controller所捕捉,它可以被多个Controller所捕捉,关键在于有多少个Controller注册了该AppEvent。下面我们要结合之前代码,新建一个新的StatusController,注册之前已有的Events,使用StatusToolbar component来给用户显示系统的运行状态。我们现在针对两个以后的事件:Feed se原创 2012-04-17 17:41:22 · 1790 阅读 · 0 评论 -
GXT之旅:第七章:MVC——Navigation,Main和Item区域交互(2)
保持同步我们现在需要保证,当有新的feed添加的时候,feeds列表要正确的更新出来。同时,我们也需要保证,当用户选择了某个feed的tab的时候,相对应于feeds列表中的feed会同步的被选中。为了实现如上两个要求,我们要创建两个对应的events——一个feed被添加,一个feed tab被选中在AppEvents类里定义两个新的EventType——FeedAdded,原创 2012-04-17 16:06:53 · 1889 阅读 · 0 评论 -
GXT之旅:第七章:MVC——Navigation,Main和Item区域交互(1)
(刚干了一个多月的flex项目,一时半会还无法转过神来专注于GXT的东东,有好多东西自己都忘的差不多了。。。。我得好好屡屡)使用TabPanel显示feeds之前,我们已经通过RssMainPanel里的 ItemGrid来显示一个feed数据。现在,我们将要使用TabPanel去管理多个TabItem——其中每一个TabItem包含一个 ItemGrid,一个ItemGrid负责显示一个原创 2012-04-12 12:55:24 · 2841 阅读 · 4 评论 -
GXT之旅:第七章:MVC——MVC重构项目(4)
使用MVC重构RSSReader项目——Item区域之前,我们已经创建了两个非常类似的Controller和View,分别服务于NavPanel和FeedPanel。现在我们继续按照同样的思路来构建ItemPanel——ItemPanelReady(EventType),ItemController和ItemView。我们的目的是生成如下样式的应用效果:AppEvents原创 2012-03-22 11:41:34 · 2413 阅读 · 6 评论 -
GXT之旅:第七章:MVC——MVC重构项目(3)
使用MVC重构RSSReader项目——FeedPanel区域下面,按照同样的逻辑,去处理FeedPanel区域。在AppEvents类,定义一个新的EventType——FeedPanelReadypublic static final EventType FeedPanelReady = new EventType();在package:com.danielva原创 2012-03-19 15:51:55 · 2059 阅读 · 0 评论 -
GXT之旅:第七章:MVC——MVC重构项目(2)
使用MVC重构RSSReader项目——Navigation区域上一节,在程序的入口文件(RSSReader),我们派发了EventType为Init的AppEvent,AppController会处理此事件,将其转发到AppView。依次的,AppView会的处理该事件,去调用onInit方法,完成基础的UI创建。在此过程中负责了程序主体的区域创建。但是,唯一没有处理的,就是没有把组装好的c原创 2012-03-15 17:39:42 · 2086 阅读 · 1 评论 -
GXT之旅:第七章:MVC——MVC重构项目(1)
使用MVC重构RSSReader项目现在我们已经初步了解了GXT MVC,现在我们就要利用此契机,将RSSRead项目重构一下,使其应用于MVC架构——让components之间具有良好的一致性,而不是各自的分散开来。为了让Controller可以接收到events,需要使用Dispatcher将其注册。通常情况我们都会在程序入口类,来完成这一操作。那么我们就开动了~~~在co原创 2012-03-13 15:27:14 · 2509 阅读 · 0 评论 -
GXT之旅:第七章:MVC——GXT MVC的相关类
AppEvent classAppEvent负责承载着信息,在controller和view之间。每个AppEvent对象都会有一个专门的EventType定义。AppEvent对象可以随意的通过setData方法,承载一个或多个datas。这样很有益于传递状态信息。当设置多个Datas的时候,我们就需要使用key-value键值对,把每个Data命名,以方便检索。另外一个功能就是,可原创 2012-03-13 10:00:13 · 3085 阅读 · 2 评论 -
GXT之旅:第七章:MVC——标准的MVC与GXT MVC
第七章:Model View Controller本章我们要了解GXT的MVC架构,以及学习他们在一个大型的应用系统里是如何系统工作的我们会涉及到如下GXt功能集AppEventEventTypeControllerViewDispatcher一个好应用的需要当我们在使用GXT搭建一个应用的时候,我认为最重要的是要如何去搭建他。当我们项目在构建的时候,会很容原创 2012-03-08 17:16:59 · 2380 阅读 · 2 评论 -
GXT之旅:第六章:Templates(2)——XTemplate(2)
XTemplate应用于其他的components除了ComboBox和ListField之外,还有其他的一些components可以使用XTemplateRowExpanderListViewCheckBoxListViewColorPaletteRowExpander如果希望让Grid的某一列的展示具有一定的显示效果的话,我们就得使用RowExpander。RowExp原创 2012-03-06 14:33:48 · 3011 阅读 · 1 评论 -
GXT之旅:第六章:Templates(2)——XTemplate(1)
XTemplateXTemplate比Template更为有用,除了拥有Template相同的功能之外,还具有更多有用的功能——提供使用更多的标记来满足自己需要的html显示效果。为了下面例子的引用,首先,定义一个Person的ModalDatapublic class Person extends BaseModel {public Person(String firstNam原创 2012-02-23 09:57:54 · 2131 阅读 · 0 评论 -
GXT之旅:第六章:Templates(1)——Template(2)
Template通过使用Template类,可以定义一组html的字符串去渲染ModelData或者Params。其生成的html 字符串里面可以设置占位符,要来作为变量可以设置参数。一个占位符参数的定义,需要通过{}给包裹起来。一个使用firstName和lastName定义的Template如下:Template template = new Template("My full原创 2012-02-09 16:29:46 · 2501 阅读 · 0 评论 -
GXT之旅:第六章:Templates(1)——Template(1)
第六章:Templates本章我们要了解Templates,以及学习他们是如何方便我们去自定义数据的格式化和显示。我们也会详细了解XTemplates的丰富功能本章,我们会涉及到如下GXt功能集TemplateXTemplateRowExpanderListViewModelProcessorCheckBoxListView之前的章节,我们学习了data-backed co原创 2012-02-07 17:39:29 · 2326 阅读 · 0 评论 -
GXT之旅:第五章:高级Components(6)——TabPanel,Status大概介绍
TabPanelTabPanel 继承 Container,作为可以容器,可以负责显示和管理TabItem 对象集。TabItem 对象集可以方法被add或remove。每一个TabItem都有一个id,用来通过findItem方法来获得其对象。通过setSelectedItem方法可是设置一个TabItem呈现被选中状态。通过getSelectedItem方法可以获得当前没选中的TabIte原创 2012-02-07 15:48:39 · 2468 阅读 · 0 评论 -
GXT之旅:第五章:高级Components(5)——ToolBar
ToolBar componentToolBar component不是我们传统意义上的buttons 或 menus。先前我们RSSReader项目,RssNavigationPanel里面的buttons已经被替换成menus,接下来我们要是ToolBar展示更丰富的功能。ToolBar里不单单可以添加butons,而且甚至ComboBox或者Label都可以添加进来。一个Co原创 2012-02-07 14:48:17 · 2342 阅读 · 0 评论 -
GXT之旅:第五章:高级Components(4)——Menus
Menu componentMenu是一个非常灵活的component,他可以显示一组菜单,创建的大致代码如下:Menu contextMenu = new Menu();contextMenu.add(new MenuItem("Option 1"));contextMenu.add(new MenuItem("Option 2"));contextMenu.add(原创 2012-02-07 11:48:29 · 1918 阅读 · 2 评论 -
GXT之旅:第五章:高级Components(3)——Paging
PagingPaging是GXT提供的非常有用的功能。顾名思义,就是分页显示数据,而不是一页显示所有的数据。GXT支持远程和本地的分页:远程分页就是真分页,每次server端返回数据都是数据库里分页后的数据;本地的分页就是假分页,数据库一次性load全部数据后,前端再分页内存里面的数据。为了方便起见,仅仅使用假分页,给大家展示一下Paging的功能。介绍一下分页工作的相关类Pa原创 2012-02-02 16:22:33 · 3935 阅读 · 3 评论 -
GXT之旅:第五章:高级Components(2)——Grid的高级应用
Grid的高级应用之前,我们学习的都是Grid的基本功能。事实上,Grids提供了丰富的功能,下面就让我们了解一下。HeaderGroupConfig假设我们想比较欧洲东部在1950和2000年之间的人口数,通常的显示效果如下:但是我们想让表格更直观的显示,如下:这时我们就需要对GXT Grid有如下步骤的加工:针对每一列,新建ColumnC原创 2012-02-02 11:18:09 · 4069 阅读 · 0 评论 -
GXT之旅:第五章:高级Components(1)——Trees和TreeGrid(2)
TreeGridTreeGrid将Trees和Grids的功能结合在一起。整体上看是由多个columns组成的Grid,但是内容上看,支持显示树目录结构的数据。他和TreePanel一样,使用的Store也是TreeStore,ModelDate也是BaseTreeModel。TreeGridCellRendererTreeGridCellRenderer实现了Gr原创 2012-02-01 10:34:07 · 4676 阅读 · 1 评论 -
GXT之旅:第五章:高级Components(1)——Trees和TreeGrid(1)
第五章:高级Components本章我们要基于前几章内容,更深入的学习data-backed components。我们会学习Tree以及如何优化和改进数据的加载和显示等内容。学习如何将Tree的概念应用与Grid。会涉及到Grid的一些高级功能。最后我们要学习menus和toolbars本章,我们会涉及到如下GXt功能集TreesBaseTreeModelTr原创 2012-01-31 17:27:51 · 4195 阅读 · 2 评论 -
GXT之旅:第四章:Data与Components(6)——GridCellRenderer
GridCellRenderer(渲染器)目前看来,RSSReader项目的grid已经简单的显示出来了——每一列都是显示简单的一个field数据。如果想要让几个fields联合起来,更丰富的显示的话,我们就需要使用GridCellRenderer。它允许我们使用HTML去渲染表格里面的内容。GridCellRenderer定义好之后,需要通过ColumnConfig.setRende原创 2012-01-31 10:34:06 · 3426 阅读 · 1 评论 -
GXT之旅:第四章:Data与Components(5)——Grid
准备工作——Item正如我们所知,一个feed的信息,里面会包含多组Item的信息,也就是一对多的概念。如果想将这些items都显示出来,我们需要有另外的model bean class来存储他们。整个处理过程如下:新建Item modalData类,其属性用来存储对应的信息(在这里为了简单起见,直接使用之前提到的第一种方法,让Item成为ModalData类。):packag原创 2012-01-30 15:24:21 · 3854 阅读 · 5 评论 -
GXT之旅:第四章:Data与Components(4)——远程数据(remote data)
使用remote datastores的数据来源不单单可以从client-side获得(就是从Registry里获得),也可以通过调用远程数据来获得。对于远程数据的加载和处理工作,GXT已经提供了轻巧方便的手段。她支持通过HTTP协议来检索XML或者JSON格式的数据,或者直接通过GWT RPC来检索到objects对象。对于不同的数据源,GXT提供了相应的机制。如果有必要的话,会把原始的数据原创 2012-01-27 14:29:48 · 3845 阅读 · 1 评论 -
GXT之旅:第四章:Data与Components(3)——Server端的持久化(2)
持久化与Store的同步还记得之前,我们实现了,通过client side的缓存store(ListStore)存储feed对象集合。但是那仅仅是在缓存里面存储着,并没有持久化数据。还记得当时是通过GWT RPC调用saveFeed方法,仅仅是将要保存的feed对象发送到server side,仅仅是按照xml格式转换之后打印出来,并没有持久化。只要应用程序一重启,所有的store都会随即消失原创 2012-01-26 16:49:19 · 3653 阅读 · 0 评论 -
GXT之旅:第四章:Data与Components(3)——Server端的持久化(1)
小妹大年初四上班,发博啦Server端的持久化到目前为止,在RSSReader项目里,还没有任何持久化的操作。为了让我们项目更具有真实性,现在我们要添加持久化的代码。但是为了让我们更专注于client-side,持久化的逻辑仅仅是最基本的操作——实现真实的持久化逻辑之前先加入持久化的接口,这样就可以为了需要,可以在不改变接口调用的基础上,改用另外一种持久化操作的内容既可(比如hiber原创 2012-01-26 14:00:37 · 3556 阅读 · 11 评论 -
GXT之旅:第四章:Data与Components(2)——Stroes
Stroes在GXT中,Stroe,一个抽象类,用于穿梭于client端,提供ModelData objects。Stroe其实就是为data-backed components存储数据的。Stroe有两种:TreeStore——为了使用于Tree components;ListStore——为了存储list数据的(被ListField, ComboBox, Grid components原创 2012-01-12 11:38:34 · 4143 阅读 · 12 评论