今天,我决定向Xtend打个招呼。 我希望学习一些新的编程语言。 选择一个标准的清单并不多。

  • 它必须是在JVM上运行的编程语言,
  • 如果我不需要学习用于建筑应用的全新生态系统,那就太好了。

我已经检查了几个选项。 JVM的编程语言列表已不多了,但在我决定要选择以下语言时:Groovy,Scala和Xtend。 在和我已经选择Xtend。

Scala不能很好地适合我的标准,另一方面,符合我的条件的常规方法却是Xtend之后我将学习的下一门编程语言。 很难解释为什么我选择Xtend。 我什至不认为Xtend是一种编程语言,它更像是扩展,但这是我的看法。

什么是Xtend

因此,这里有一些关于该语言的词。 有关更多信息,请访问Xtend网页。 这是一种美观而简单的语言,可以使Java现代化。 Xtend代替了编译后的字节码,而是转换为漂亮的Java类,这使其适用于无法使用字节码(例如GWT)的平台。 正如我已经提到的,用Xtend编写的代码产生Java类,因此在使用任何现有Java框架时都没有限制。 该语言是用Xtext创建的,因此它已经准备好了Eclipse,并且有该语言的maven插件,因此在Eclipse中使用它不会有问题。

学习

学习Xtend并不难。 Java中目前缺少一些语法更改和一些新的语义概念。 与其他编程语言相比,没有什么革命性的东西,Xtend只是用新功能扩展了Java,它将使您可以创建更好,更短的类。 我最关注的功能是闭包,lambda表达式和扩展。 这些东西使您可以创建一个非常好的构建器类。 您可以轻松创建UI Builders API,这将使您可以创建更简单的视图(不是在功能范围内,而是在代码理解的范围内)。

参与Xtend

我已经提到Xtend是使用Xtext构建的,这意味着eclipse已经能够正确处理Xtend语言。 创建新的Xtend类后,如果您不使用maven获取依赖项,则eclipse将抱怨缺少的lib,并提供您将其添加到类路径中。 这篇博客文章的目的是展示Xtend如何改善构建UI的方式。我已经找到了JavaFX,GWT的好示例……但是我没有找到Vaadin的任何东西,因此我决定构建一个简单的类来构建Vaadin UI。 或者更确切地说只是其中的一部分。 下面的示例尚未完全实现,它只能构建UI的一部分,但可以轻松扩展。

Vaadins UI是用Java编写的命令式UI的示例。 构建UI的过程类似于GWT或SWT中构建命令式UI的过程。 这是一个简单的示例,其外观如下:

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的典型实现,我的目标是使其变得更容易阅读。 为此,我将从构建器类开始。

制作UI Builder API

为了更好地创建UI,我将首先创建一个组件构建器。 这不是构建器模式的标准实现,就像我们可以在纯Java中那样。 实际上,我们正在构建扩展类。 此类包含扩展方法,这些扩展方法将使用新方法扩展现有的类。 这是该类的实现。

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 }}

单独的builder类不能做很多事情,它具有基本的功能,例如构建窗口,添加各种面板和按钮,并且如果您熟悉Vaadin的话,您知道框架中内置了很多组件。 构建器中的几乎所有方法都有两个参数。 第一个参数代表将处理新组件的容器类,第二个参数是闭包,它将包含用于组件初始化的代码。

制作UI

以下代码段中的代码说明了如何使用构建器类来构建Vaadin UI。 类主体中的第一行包括ComponentBuilder作为扩展。 强大的Xtend的lambda语法使代码看起来更简单易懂。 这样,我们消除了Java的内部类和许多纯Java代码中的样板代码。 有关Xtend Lambda表达式的更多信息,请参见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)}}

结论

因此,这是一种非常不错的语言,学习过程仅需几个小时。 文档写得很好,主要的语言概念显示在大约50页中。 几个小时后,您就可以准备改善您的应用程序了。 这就是Java的外观。 简而言之,与Xtend一起玩很有趣,值得花时间。

参考: Igor Madjeric博客上的JCG合作伙伴 Igor Madjeric 使用Xtend构建Vaadin UI 。

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

使用Xtend构建Vaadin UI相关推荐

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

    xtend怎么使用 今天,我决定向Xtend打个招呼. 我希望学习一些新的编程语言. 选择一个标准的清单并不多. 它必须是在JVM上运行的编程语言, 如果我不需要学习用于建筑应用的全新生态系统,那就太 ...

  2. 第二部分:开发简要指南-第六章 使用Fragments构建动态UI

    第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用Fragment类 ...

  3. 从零开始--系统深入学习android(实践-让我们开始写代码-新手指南-6.使用Fragments构建动态UI)...

    第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用 Fragment ...

  4. 【JavaFx 构建ProAdmin UI界面】

    [JavaFx 构建ProAdmin UI界面] ProAdmin 原界面效果 这个版本的proAdmin 界面非常大气清爽,原界面设计已经无法找到,只能查到这一张图片而已,有原psd或资源的朋友可以 ...

  5. Flask 系列之 构建 Swagger UI 风格的 WebAPI

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworl ...

  6. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信

    原文地址:http://android.xsoftlab.net/training/basics/fragments/communicating.html 为了可以重复使用Fragment UI组件, ...

  7. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  8. 小波说雨燕 第三季 构建 swift UI 之 度假清单 学习笔记

    最终的效果: <1>第一个场景: 1.本地化 界面简体中文化 Supporting Files - info.plist Localization native development r ...

  9. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(一)视图共性 学习笔记...

    2019独角兽企业重金招聘Python工程师标准>>> 如果想进行自定义的配置,可以继承基类UIView. 地图app中需要多点触动Multiple Touch, opaque不透明 ...

最新文章

  1. 3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
  2. 知识梳理——HTML篇
  3. html如何获得网址,已知一个网址,如何获得该网址对应的html源代码?在del 找人事管理软件...
  4. c# webbrowser  获取用户选中文字
  5. 居民安装光伏系统常会碰壁 怎么样做才能少走弯路?
  6. Linux—磁盘和文件系统管理(二)
  7. Q110:PBRT-V3十大基类对应的继承关系
  8. Ubunbtu18.04报错:No rule to make target ‘kernel/include/linux/netfilter/xt_CONNMARK.h‘
  9. 数据结构设计_数据结构算法设计题学起来很困难怎么破
  10. Java爬虫开发总结
  11. 公司年会不知道送什么?2021平价高颜值蓝牙耳机推荐
  12. eXtremeComponents介绍
  13. 通过网页获取图片操作步骤
  14. 颂钵带给我们是什么感受
  15. 三、GDT和IDT的配置
  16. C#阿里云短信接口API开发步骤
  17. pandownload网页版服务器维护中,PanDownload网页版源码
  18. 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍
  19. 2020华为软件精英挑战赛历程总结——复赛篇
  20. unity中获取FPS

热门文章

  1. spring中stereotype注解Component,Repository,Service,Controller
  2. java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低
  3. docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase
  4. javafx窗体程序_JavaFX真实世界应用程序:EIZO CuratOR Caliop
  5. hazelcast入门教程_Hazelcast入门指南第5部分
  6. 易语言 字段重复_使对易失性字段的操作原子化
  7. 吞吐量-Corda的故事
  8. 高级java开发_我最喜欢的Java高级开发人员书籍
  9. spring条件注解有哪些_Spring4有条件
  10. Java 10迁移建议