高級SmartGWT教程,第2部分

這是我的教程的第二部分,有關使用SmartGWT快速進行UI開發。 在本教程的第一部分中 ,我們創建了基本的界面布局并添加了一些基本組件。 現在是時候解決這個問題,并使用SmartGWT的真正功能了。

在繼續之前,讓我們記住到目前為止我們創建的UI的樣子:

完成本教程后,UI將會變成以下內容:

為了重新定義它們的功能,我們將不得不重新訪問一些現有的類。 讓我們從NavigationArea類開始。 在那里,我們使用SectionStack類創建了手風琴。 但是,每個堆棧部分僅包含一個普通標簽。 我們將在導航方面添加一些更有用的東西。 我們將在導航窗格中使用一棵樹,其中每個葉子實際上將代表一個動作。 為此,我們將通過定義out實現的特定特征來擴展TreeGrid類。 因此,這是“ NavigationTreeGrid”類:

package com.javacodegeeks.smartgwt.appui.client.ui.widgets;import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.tree.Tree;
import com.smartgwt.client.widgets.tree.TreeGrid;
import com.smartgwt.client.widgets.tree.TreeNode;
import com.smartgwt.client.widgets.tree.events.NodeClickEvent;
import com.smartgwt.client.widgets.tree.events.NodeClickHandler;public class NavigationTreeGrid extends TreeGrid {public NavigationTreeGrid() {setNodeIcon("arrow_down.png");  setFolderIcon("arrow_up.png");  setShowOpenIcons(false);setShowDropIcons(false);setShowSelectedStyle(true);  setShowPartialSelection(true);  setCascadeSelection(false);setCanSort(false);setShowConnectors(true);setShowHeader(false);setLoadDataOnDemand(false);setSelectionType(SelectionStyle.SINGLE);Tree data = new Tree();data.setModelType(TreeModelType.CHILDREN);data.setRoot(new TreeNode("root", new TreeNode("File",new TreeNode("FileChild")), new TreeNode("Edit",new TreeNode("EditChild",new TreeNode("EditGrandChild"))), new TreeNode("Window")));setData(data);addNodeClickHandler(new NodeClickHandler() {            @Overridepublic void onNodeClick(NodeClickEvent event) {String name = event.getNode().getName();SC.say("Node Clicked: " + name);}});}}

我們首先為樹定義一些屬性,更重要的是:

  • setShowConnectors :定義是否應顯示連接器線,以說明樹的層次結構。
  • setClosedIconSuffix :此后綴附加在提供的圖標名稱后,默認為“ closed”,因此您最好使用自定義值并覆蓋該值。
  • setSelectionType :定義網格的可單擊選擇行為,即,是否可以在給定時間選擇多個項目。

此外, setNodeIcon和setFolderIcon方法用于為每個節點設置適當的圖標,具體取決于它是父節點還是葉節點。

接下來,我們創建一個Tree實例,該實例本質上是一個數據模型,它代表鏈接到層次結構中的一組對象。 每個樹節點都是通過TreeNode類實現的,我們使用setRoot方法設置根節點。 請注意,可以通過使用名稱和對象數組來構造每個節點,因此,通過采用遞歸方法,我們可以在一行中創建整個樹。 然后,我們使用setData方法將Tree中的數據提供給TreeGrid 。 最后,我們為節點單擊事件注冊一個處理程序,并通過創建一個顯示節點名稱的彈出窗口來實現NodeClickHandler接口。

為了使用我們新創建的樹,我們返回“ NavigationArea”類并更改以下幾行:

...
SectionStackSection section1 = new SectionStackSection("Section 1");
section1.setExpanded(true);
final NavigationTreeGrid navigationTreeGrid = new NavigationTreeGrid();
navigationTreeGrid.setHeight100();
section1.addItem(navigationTreeGrid);
...

讓我們看看這是如何改變導航區域中的界面的:

單擊其中一個節點后,將出現一個具有相關名稱的窗口:

下一步是填充現在幾乎是空的主要區域。 我們將為此使用標簽。 使用選項卡是高度首選的,因為它在屏幕空間方面非常有效。 通過堆疊選項卡,用戶可以同時打開許多面板,只需單擊即可導航到首選面板。

在SmartGWT中,選項卡的使用由Tab類提供。 但是,為了呈現選項卡,必須將這些選項卡分組在TabSet中 ,該選項卡允許多個窗格上的組件共享同一空間。 用戶可以選擇頂部的選項卡以顯示每個窗格。

現在,我們將重新訪問“ MainArea”類,并在其中添加三個不同的選項卡窗格。 第一個將僅包含任意HTML元素,第二個將具有連接的菜單,第三個將包含自定義垂直手風琴。 讓我們看看如何做到這一點:

package com.javacodegeeks.smartgwt.appui.client.ui;import com.javacodegeeks.smartgwt.appui.client.ui.widgets.CustomAccordion;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.menu.Menu;
import com.smartgwt.client.widgets.menu.MenuItem;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import com.smartgwt.client.widgets.toolbar.ToolStrip;
import com.smartgwt.client.widgets.toolbar.ToolStripButton;
import com.smartgwt.client.widgets.toolbar.ToolStripMenuButton;public class MainArea extends VLayout {final TabSet topTabSet = new TabSet();public MainArea() {super();this.setOverflow(Overflow.HIDDEN);topTabSet.setTabBarPosition(Side.TOP);  topTabSet.setTabBarAlign(Side.LEFT);ToolStrip toolStrip = new ToolStrip();toolStrip.setWidth100();ToolStripButton iconButton = new ToolStripButton();iconButton.setTitle("MyButton");toolStrip.addButton(iconButton);        MenuItem[] itemArray = new MenuItem[4];itemArray[0] = new MenuItem("MenuItem1");Menu menu1 = new Menu();menu1.setData(new MenuItem("SubMenuItem11"), new MenuItem("SubMenuItem12"));itemArray[0].setSubmenu(menu1);itemArray[1] = new MenuItem("MenuItem2");Menu menu2 = new Menu();menu2.setData(new MenuItem("SubMenuItem21"), new MenuItem("SubMenuItem22"));itemArray[1].setSubmenu(menu2);Menu parentMenu = new Menu();  parentMenu.setCanSelectParentItems(true);  parentMenu.setData(itemArray);ToolStripMenuButton menuButton = new ToolStripMenuButton("Menu", parentMenu);toolStrip.addMenuButton(menuButton);VLayout hlayout = new VLayout();hlayout.addMember(toolStrip);hlayout.addMember(new HTMLFlow("Tab3"));addTabToTopTabset("Tab1", new HTMLFlow("Tab1"), true);addTabToTopTabset("Tab2", hlayout, true);        addTabToTopTabset("Tab3", new CustomAccordion(), true);this.addMember(topTabSet);}private void addTabToTopTabset(String title, Canvas pane, boolean closable) {Tab tab = createTab(title, pane, closable);topTabSet.addTab(tab);topTabSet.selectTab(tab);}private Tab createTab(String title, Canvas pane, boolean closable) {Tab tab = new Tab(title);tab.setCanClose(closable);tab.setPane(pane);return tab;}}

這里要注意的事情。 首先,我們使用ToolStrip ,它實際上是可以附加各種小部件(按鈕,菜單等)的條。 特定的類只能添加到工具條中。 例如,如果要添加按鈕,則必須創建一個ToolStripButton實例。 同樣,可以將整個菜單附加到該菜單上。 創建菜單類的實例后,我們使用MenuItem類向其添加組件。 最后,菜單被封裝到ToolStripMenuButton中 ,然后最終被添加到工具條中。

關于標簽,API非常簡單。 我們使用TabSet類的addTab方法添加新的標簽,并使用selectTab方法選擇特定的標簽。 在選項卡本身上,我們可以使用setPane方法來指定與特定選項卡關聯的窗格。 要確定選項卡是否應提供用于關閉自身的圖標,請使用setCanClose方法。

最后,讓我們看一下“ CustomAccordion”類,它基本上是一種垂直手風琴。

package com.javacodegeeks.smartgwt.appui.client.ui.widgets;import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;public class CustomAccordion extends SectionStack {public CustomAccordion() {this.setWidth100();this.setVisibilityMode(VisibilityMode.MUTEX);this.setShowExpandControls(false);this.setAnimateSections(true);SectionStackSection section1 = new SectionStackSection("TabSection1"); section1.setExpanded(true); HTMLFlow htmlFlow1 = new HTMLFlow();  htmlFlow1.setOverflow(Overflow.AUTO);  htmlFlow1.setPadding(10);  htmlFlow1.setContents("TabSection1");     section1.addItem(htmlFlow1);SectionStackSection section2 = new SectionStackSection("TabSection2");  section2.setExpanded(false);  HTMLFlow htmlFlow2 = new HTMLFlow();  htmlFlow2.setOverflow(Overflow.AUTO);  htmlFlow2.setPadding(10);  htmlFlow2.setContents("TabSection2");  section2.addItem(htmlFlow2);SectionStackSection section3 = new SectionStackSection("TabSection3");  section3.setExpanded(false);HTMLFlow htmlFlow3 = new HTMLFlow();  htmlFlow3.setOverflow(Overflow.AUTO);  htmlFlow3.setPadding(10);  htmlFlow3.setContents("TabSection3");    section3.addItem(htmlFlow3);this.addSection(section1);  this.addSection(section2);  this.addSection(section3);}}

我們以前沒見過什么,我們使用SectionStack類創建手風琴并向其添加SectionStackSection 。 HTMLFlow類用于顯示應擴展到其自然大小而無需滾動HTML內容。

啟動Eclipse配置,然后將瀏覽器指向提供的URL:

http://127.0.0.1:8888/AwesomeSmartGWTUIProject.html?gwt.codesvr=127.0.0.1:9997

現在讓我們看一下每個選項卡的外觀:

* Tab1:非常簡單明了。

* Tab2:此選項卡包含一個工具條,上面帶有一個按鈕和一個菜單。

* Tab3:此選項卡將垂直手風琴圍成三個獨立的部分。

這就是整個用戶界面的樣子:

我們已經到了本教程的結尾,所以讓我們重新回顧一下已經完成的工作。 首先,我們通過定義特定區域并添加相應的子布局來創建UI的主布局。 每個子布局都是單獨處理的。 對于標題區域,我們在左側添加了應用程序的徽標,在右側添加了已登錄用戶的名稱。 對于導航區域,我們使用了一個手風琴,該手風琴將一棵樹封閉在其中的一部分中。 這棵樹可以有任意數量的子代,孫代等,但是您不可以一味地接受它。 最后,對于主布局,我們使用了選項卡,以便最大程度地利用屏幕區域。 創建了三個預定義的選項卡,每個選項卡包含各種小部件。 請注意,導航窗格應鏈接到主區域。 每當用戶單擊其中一個葉子時,都可以通過創建一個新選項卡來實現。

伙計們。 您可以在這里找到創建的最終Eclipse項目。 如果您喜歡這個,別忘了分享! 干杯!

相關文章 :
  • 高級SmartGWT教程,第1部分
  • SmartGWT入門,提供出色的GWT界面
  • 將JSON功能添加到您的GWT應用程序中
  • 建立自己的GWT Spring Maven原型
  • 將CAPTCHA添加到您的GWT應用程序
  • GWT Spring和Hibernate進入數據網格世界

翻譯自: https://www.javacodegeeks.com/2011/01/advanced-smartgwt-tutorial-part-2.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374731.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

有感而發,生活

我們每一個人都是獨一無二的,當然我們每一個人的路子也是不盡相同的,不能因為一時的失意而放棄了自己兒時的夢想,路是一步一步走的,未來需要努力,我相信 我們每一個人都可以做到自己心中的樣子,安逸的生活是…

力扣反轉字符串中的元音字母

給你一個字符串 s ,僅反轉字符串中的所有元音字母,并返回結果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小寫兩種形式出現。 代碼思路: 1.將字符串轉換為字符數組 2.設置碰撞指針,從兩頭尋…

使用 SqlDataSource 插入、更新和刪除數據49

簡介 正如在 數據插入、更新和刪除概述 中討論的那樣,GridView 控件提供內置的更新和刪除功能,而DetailsView 和 FormView 控件則包含對插入、編輯和刪除功能的支持。這些數據修改功能無需編寫任何代碼,可直接嵌入數據源控件。 數據插入、更新…

Solaris是出色的Java開發平臺的原因

幾天前,我發布了“ OpenSolaris的死亡:為Java開發人員選擇操作系統 ”,其中我說Solaris是Java開發人員的絕佳平臺。 這篇文章的重點只是想知道自OpenSolaris淘汰以來我將使用哪個Solaris版本。 正如Neil的評論使我意識到的那樣,該…

python , angular js 學習記錄【2】

1.不同scope之間的通信 (1)無父子關系的scope通信: 在需要操作的scope里面定義一個事件,名稱為delete_host,參數為data $rootScope.$on(delete_host, function(event,data) {angular.forEach($scope.hosts, function (…

【轉】phpize學習

為什么使用phpize? 比如剛開始安裝的時候使用 ./configure --prefix/usr/local/php7 --exec-prefix/usr/local/php7 --bindir/usr/local/php7/bin --sbindir/usr/local/php7/sbin --includedir/usr/local/php7/include --libdir/usr/local/php7/lib/php --mandir/usr/local/ph…

GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示

不久前,我的一個朋友和同事向我飛過,說“世界上只有一半在使用Maven ”。 當我意識到最受歡迎的文章(到目前為止) GWT 2 Spring 3 JPA 2 Hibernate 3.5 Tutorial提出了一種基于Google的Web Toolkit( GWT ) …

Android的WiFi開啟與關閉

注意&#xff1a;要首先注冊開啟和關閉WiFi的權限&#xff0c; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.wyl.wifi"android:versionCode&q…

awk用法小結(作者總結)

http://www.chinaunix.net/old_jh/24/691456.htmlhttp://wenku.baidu.com/view/ebac4fc658f5f61fb736664d.htmlawk 用法&#xff1a;awk pattern {action} 變量名 含義 ARGC 命令行變元個數 ARGV 命令行變元數組 FILENAME 當前輸入文件名 FNR 當前文件中的記錄號 FS 輸入域分…

力扣盛最多水的容器

給你 n 個非負整數 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線&#xff0c;垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0) 。找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多…

Java最佳實踐–多線程環境中的DateFormat

這是有關使用Java編程語言時的擬議實踐的系列文章的第一篇。 所有討論的主題均基于用例&#xff0c;這些用例來自于電信行業的關鍵任務超高性能生產系統的開發。 在閱讀本文的每個部分之前&#xff0c;強烈建議您參考相關的Java API文檔以獲取詳細信息和代碼示例。 所有測試…

IntentDemo

Intent通信示例&#xff1a; 兩個Button&#xff0c;一個startBrowser, 一個startPhone. 其中&#xff0c;OnClickListener()是類View的一個interface&#xff0c;需要實現其中的onClick()函數。 startActivity()開啟另一個Activity&#xff0c;本示例中開啟Browser或Phone. In…

JBoss 4.2.x Spring 3 JPA Hibernate教程

在花了許多時間在網上搜索之后&#xff0c;嘗試找到對幾個項目使用Spring&#xff0c;JPA和Hibenate的最有效方法&#xff0c;我們得出了將在下面介紹的配置的結論。 將Spring與JPA和Hibernate集成包括幾個步驟&#xff1a; Spring容器的配置 JPA ORM層的配置 Hibernate Sec…

力扣長度最小的子數組

給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其和 ≥ target 的長度最小的 連續子數組 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其長度。如果不存在符合條件的子數組&#xff0c;返回 0 方法一&#xff1a;移動窗口 設置兩個指針&…

Yeelink:將復雜的傳感器以極簡的方式組到同一個網絡內

Yeelink&#xff1a;將復雜的傳感器以極簡的方式組到同一個網絡內轉載于:https://www.cnblogs.com/qxql2016/p/4692629.html

androidstudio新建項目中在布局文件中不顯示title的方法

在androidstudio新建項目的時候&#xff0c;在布局文件里有時候會出現如下情況&#xff1a; 上面的標題欄非常礙眼&#xff0c;要想隱藏標題欄的話&#xff0c;可以在Manifest文件的theme標簽里進行配置&#xff0c;自定義一個theme&#xff0c;加上如下兩句。或者直接在當前th…

OpenJDK作為Linux上的默認Java

大家好&#xff0c; 最近&#xff0c;我收到了很多人的私人來信&#xff0c;他們對Linux的默認Java軟件包的更改感到困惑/擔心。 對于許多Linux發行版&#xff0c;Java的Sun / Oracle官方版本已打包為該平臺的默認Java。 但是&#xff0c;由于最近的許可更改&#xff0c;情況將…

力扣 數組中的第K個最大元素

給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 k 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 分析&#xff1a;這是個排序題&#xff0c;只要排好序&#xff0c;一切迎刃而解。我決定把排序…

Ajax應用需要注意的事項

接觸Ajax&#xff0c;那時候的Ajax支持還不是很好&#xff0c;都要涉及底層&#xff0c;沒有現成的框架給你調用。現在把常見的問題列舉如下。 1、編碼問題 注意AJAX要取的文件是UTF-8編碼的。GB2312編碼傳回BROWSE后中文會亂碼。如果用VBScript的話還可以轉化&#xff0c;但是…

Xcode插件

古人云“工欲善其事必先利其器”&#xff0c;打造一個強大的開發環境&#xff0c;是立即提升自身戰斗力的絕佳途徑&#xff01;以下是搜集的一些有力的XCode插件。1.全能搜索家CodePilot 2.0你要找的是文件&#xff1f;是文件夾&#xff1f;是代碼&#xff1f;Never Mind&#…