日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

xtend怎么使用_使用Xtend构建Vaadin UI

發(fā)布時(shí)間:2023/12/3 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xtend怎么使用_使用Xtend构建Vaadin UI 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

xtend怎么使用

今天,我決定向Xtend打個(gè)招呼。 我希望學(xué)習(xí)一些新的編程語(yǔ)言。 選擇一個(gè)標(biāo)準(zhǔn)的清單并不多。

  • 它必須是在JVM上運(yùn)行的編程語(yǔ)言,
  • 如果我不需要學(xué)習(xí)用于建筑應(yīng)用的全新生態(tài)系統(tǒng),那就太好了。

我檢查了幾個(gè)選項(xiàng)。 JVM的編程語(yǔ)言列表已不多了,但在我決定要選擇以下語(yǔ)言時(shí):Groovy,Scala和Xtend。 在和我已經(jīng)選擇Xtend。

Scala不能很好地適合我的標(biāo)準(zhǔn),另一方面,符合我的條件的常規(guī)做法卻是Xtend之后我將學(xué)習(xí)的下一門(mén)編程語(yǔ)言。 很難解釋為什么我選擇Xtend。 我什至不認(rèn)為Xtend是一種編程語(yǔ)言,它更像是擴(kuò)展,但這是我的看法。

什么是Xtend

因此,這里有一些關(guān)于該語(yǔ)言的詞。 有關(guān)更多信息,請(qǐng)?jiān)L問(wèn)Xtend網(wǎng)頁(yè)。 這是一種美觀而簡(jiǎn)單的語(yǔ)言,可以使Java現(xiàn)代化。 Xtend代替了編譯后的字節(jié)碼,而是轉(zhuǎn)換成漂亮的Java類(lèi),這使其適用于不使用字節(jié)碼的平臺(tái)(如GWT)。 正如我已經(jīng)提到的,用Xtend編寫(xiě)的代碼產(chǎn)生Java類(lèi),因此在使用任何現(xiàn)有Java框架時(shí)都沒(méi)有限制。 該語(yǔ)言是使用Xtext創(chuàng)建的,因此它已經(jīng)準(zhǔn)備好了Eclipse,并且有該語(yǔ)言的maven插件,因此在Eclipse中使用它不會(huì)有問(wèn)題。

學(xué)習(xí)

學(xué)習(xí)Xtend并不難。 Java中目前缺少一些語(yǔ)法更改和一些新的語(yǔ)義概念。 與其他編程語(yǔ)言相比,沒(méi)有什么革命性的東西,Xtend只是用新功能擴(kuò)展了Java,它將允許您創(chuàng)建更好,更短的類(lèi)。 我最關(guān)注的功能是閉包,lambda表達(dá)式和擴(kuò)展。 這些東西使您可以創(chuàng)建一個(gè)非常好的構(gòu)建器類(lèi)。 您可以輕松創(chuàng)建UI Builders API,這將使您可以創(chuàng)建更簡(jiǎn)單的視圖(不是在功能范圍內(nèi),而是在代碼理解的范圍內(nèi))。

參與Xtend

我已經(jīng)提到Xtend是使用Xtext構(gòu)建的,這意味著eclipse已經(jīng)能夠正確處理Xtend語(yǔ)言。 創(chuàng)建新的Xtend類(lèi)后,如果您不使用maven獲取依賴(lài)項(xiàng),則eclipse會(huì)抱怨缺少的lib,并建議您將它們添加到類(lèi)路徑中。 這篇博客文章的目的是展示Xtend如何改善構(gòu)建UI的方式。我已經(jīng)找到了JavaFX,GWT的不錯(cuò)的示例……但是我沒(méi)有找到Vaadin的任何東西,因此我決定構(gòu)建一個(gè)簡(jiǎn)單的類(lèi)來(lái)構(gòu)建Vaadin UI。 或者更確切地說(shuō)只是其中的一部分。 以下示例尚未完全實(shí)現(xiàn),它只能構(gòu)建UI的一部分,但可以輕松擴(kuò)展。

Vaadins UI是用Java編寫(xiě)的命令式UI的示例。 構(gòu)建UI的過(guò)程類(lèi)似于GWT或SWT中構(gòu)建命令式UI的過(guò)程。 這是一個(gè)簡(jiǎn)單的示例,其外觀如下:

package org.pis.web.application;import org.eclipse.xtext.xbase.lib.InputOutput;import com.vaadin.Application; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Panel; import com.vaadin.ui.Window;@SuppressWarnings("serial") public class MainWindow extends Application {public void init() {Window main = new Window();HorizontalLayout hl = new HorizontalLayout();Panel panel = new Panel();final Button button = new Button("First button");button.addListener( new ClickListener() {@Overridepublic void buttonClick(ClickEvent event) {sayHello("Hello First Button");button.setCaption("First button clicked");}});panel.addComponent(button);Button button2 = new Button("Second button");button2.addListener(new ClickListener() {@Overridepublic void buttonClick(ClickEvent event) {sayHello("Hello Second Button");}});main.addComponent(hl);setMainWindow(main);}public void sayHello(final String string) {InputOutput.<String> println(string);} }

上面的示例是Vaadin UI的典型實(shí)現(xiàn),我的目標(biāo)是使其變得更容易閱讀。 為此,我將從構(gòu)建器類(lèi)開(kāi)始。

制作UI Builder API

為了更好地創(chuàng)建UI,我將首先創(chuàng)建一個(gè)組件構(gòu)建器。 這不是構(gòu)建器模式的標(biāo)準(zhǔn)實(shí)現(xiàn),就像我們可以在純Java中那樣。 實(shí)際上,我們正在構(gòu)建擴(kuò)展類(lèi)。 此類(lèi)包含擴(kuò)展方法,這些擴(kuò)展方法將使用新方法擴(kuò)展現(xiàn)有的類(lèi)。 這是該類(lèi)的實(shí)現(xiàn)。

package org.pis.web.applicationimport com.vaadin.ui.Window import com.vaadin.ui.Button import com.vaadin.ui.Panel import com.vaadin.ui.HorizontalLayout import com.vaadin.ui.ComponentContainerclass ComponentBuilder{def window ( (Window) => void initializer){new Window().init(initializer)}def panel( ComponentContainer it, (Panel) => void initializer){val panel = new Panel().init(initializer)it.addComponent(panel)return panel}def horizontalLayout (ComponentContainer it, (HorizontalLayout) => void initializer){val hl = new HorizontalLayout().init(initializer)it.addComponent(hl);return hl}def button ( ComponentContainer it, (Button)=> void initializer){println('Button in panel creation')val that = new Button().init(initializer);it.addComponent(that);return that}def private <T> T init(T obj, (T) => void init){init?.apply(obj)return obj }}

單獨(dú)的builder類(lèi)不能做很多事情,它具有基本的功能,例如構(gòu)建窗口,添加各種面板和按鈕,并且如果您熟悉Vaadin的話(huà),您知道框架中內(nèi)置了很多組件。 構(gòu)建器中的幾乎所有方法都有兩個(gè)參數(shù)。 第一個(gè)參數(shù)代表將處理新組件的容器類(lèi),第二個(gè)參數(shù)是閉包,它將包含用于組件初始化的代碼。

制作UI

以下代碼段中的代碼說(shuō)明了如何使用構(gòu)建器類(lèi)來(lái)構(gòu)建Vaadin UI。 類(lèi)主體中的第一行包括ComponentBuilder作為擴(kuò)展。 強(qiáng)大的Xtend的lambda語(yǔ)法使代碼看起來(lái)更簡(jiǎn)單易懂。 這樣,我們消除了Java的內(nèi)部類(lèi)和許多純Java代碼中的樣板代碼。 有關(guān)Xtend Lambda表達(dá)式的更多信息,請(qǐng)參見(jiàn)Xtend的文檔。

package org.pis.web.applicationimport com.vaadin.Application import com.vaadin.ui.Buttonclass MainWindowXtend extends Application{extension ComponentBuilder = new ComponentBuilderoverride init() { mainWindow = window[horizontalLayout[panel[button[caption = "First button"it.addListener()[sayHello('Hello First Button');component as Buttoncomponent.caption = 'First button clicked']]button[caption = "Second button"it.addListener()[sayHello('Hello');]]]]]; }def void sayHello(String string) { println(string)}}

結(jié)論

因此,這是一種非常不錯(cuò)的語(yǔ)言,學(xué)習(xí)過(guò)程只需幾個(gè)小時(shí)。 文檔寫(xiě)得很好,主要的語(yǔ)言概念顯示在大約50頁(yè)中。 幾個(gè)小時(shí)后,您就可以準(zhǔn)備改善您的應(yīng)用程序了。 這就是Java的外觀。 簡(jiǎn)而言之,與Xtend一起玩很有趣,值得花時(shí)間。

參考:在Igor Madjeric博客上,我們的JCG合作伙伴 Igor Madjeric 使用Xtend構(gòu)建Vaadin UI 。

翻譯自: https://www.javacodegeeks.com/2013/02/building-vaadin-ui-with-xtend.html

xtend怎么使用

總結(jié)

以上是生活随笔為你收集整理的xtend怎么使用_使用Xtend构建Vaadin UI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。