使用Xtend构建Vaadin UI
今天,我决定向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相关推荐
- xtend怎么使用_使用Xtend构建Vaadin UI
xtend怎么使用 今天,我决定向Xtend打个招呼. 我希望学习一些新的编程语言. 选择一个标准的清单并不多. 它必须是在JVM上运行的编程语言, 如果我不需要学习用于建筑应用的全新生态系统,那就太 ...
- 第二部分:开发简要指南-第六章 使用Fragments构建动态UI
第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用Fragment类 ...
- 从零开始--系统深入学习android(实践-让我们开始写代码-新手指南-6.使用Fragments构建动态UI)...
第6章 使用Fragments构建动态UI 为了在Android创建一个动态的多面的用户界面,你需要封装UI组件和activity的行为到一种可以相互交换的act的模块中.我们能使用 Fragment ...
- 【JavaFx 构建ProAdmin UI界面】
[JavaFx 构建ProAdmin UI界面] ProAdmin 原界面效果 这个版本的proAdmin 界面非常大气清爽,原界面设计已经无法找到,只能查到这一张图片而已,有原psd或资源的朋友可以 ...
- Flask 系列之 构建 Swagger UI 风格的 WebAPI
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 环境初始化 # 创建项目目录 mkdir helloworl ...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信
原文地址:http://android.xsoftlab.net/training/basics/fragments/communicating.html 为了可以重复使用Fragment UI组件, ...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...
- 小波说雨燕 第三季 构建 swift UI 之 度假清单 学习笔记
最终的效果: <1>第一个场景: 1.本地化 界面简体中文化 Supporting Files - info.plist Localization native development r ...
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(一)视图共性 学习笔记...
2019独角兽企业重金招聘Python工程师标准>>> 如果想进行自定义的配置,可以继承基类UIView. 地图app中需要多点触动Multiple Touch, opaque不透明 ...
最新文章
- 3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
- 知识梳理——HTML篇
- html如何获得网址,已知一个网址,如何获得该网址对应的html源代码?在del 找人事管理软件...
- c# webbrowser 获取用户选中文字
- 居民安装光伏系统常会碰壁 怎么样做才能少走弯路?
- Linux—磁盘和文件系统管理(二)
- Q110:PBRT-V3十大基类对应的继承关系
- Ubunbtu18.04报错:No rule to make target ‘kernel/include/linux/netfilter/xt_CONNMARK.h‘
- 数据结构设计_数据结构算法设计题学起来很困难怎么破
- Java爬虫开发总结
- 公司年会不知道送什么?2021平价高颜值蓝牙耳机推荐
- eXtremeComponents介绍
- 通过网页获取图片操作步骤
- 颂钵带给我们是什么感受
- 三、GDT和IDT的配置
- C#阿里云短信接口API开发步骤
- pandownload网页版服务器维护中,PanDownload网页版源码
- 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍
- 2020华为软件精英挑战赛历程总结——复赛篇
- unity中获取FPS
热门文章
- spring中stereotype注解Component,Repository,Service,Controller
- java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低
- docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase
- javafx窗体程序_JavaFX真实世界应用程序:EIZO CuratOR Caliop
- hazelcast入门教程_Hazelcast入门指南第5部分
- 易语言 字段重复_使对易失性字段的操作原子化
- 吞吐量-Corda的故事
- 高级java开发_我最喜欢的Java高级开发人员书籍
- spring条件注解有哪些_Spring4有条件
- Java 10迁移建议