xtend怎么使用_使用Xtend构建Vaadin UI
xtend怎么使用
今天,我决定向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怎么使用
xtend怎么使用_使用Xtend构建Vaadin UI相关推荐
- 使用Xtend构建Vaadin UI
今天,我决定向Xtend打个招呼. 我希望学习一些新的编程语言. 选择一个标准的清单并不多. 它必须是在JVM上运行的编程语言, 如果我不需要学习用于建筑应用的全新生态系统,那就太好了. 我已经检查了 ...
- xtend怎么使用_Java替代Xtend又推出了另一个块摇摆更新
xtend怎么使用 Xtend 2.7已着陆. 但是除了通常的错误修复,我们还能期待什么? 当然有一些漂亮的功能. 甚至更多:Xtend还在吹嘘一轮IDE性能改进. 同时,DSL框架Xtext还收到了 ...
- 密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码)
密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码) 3. AES实验 3) (思考题)利用Sage构建AES的S盒和逆S盒 ...
- element ui 空格_空格是您的UI朋友。 大量使用它。
element ui 空格 Originally published at marcandrew.me on July 30th, 2020. 最初于 2020 年7月30日 在 marcandrew ...
- pyqt 获取 UI 中组件_一起学Vue:UI框架(elementui)
目标 使用Vue+ElementUI构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 效果页面 比如我们要实现这样列表.新增.编辑三个页面: 列表页面 新增页面 编辑页面 安装elem ...
- 第二部分:开发简要指南-第六章 使用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或资源的朋友可以 ...
- 机器学习特征构建_使用Streamlit构建您的基础机器学习Web应用
机器学习特征构建 Data scientist and ML experts often find it difficult to showcase their findings/result to ...
最新文章
- Zuul Gateway 网关
- 马云马化腾李彦宏在IT峰会上的话-内容提炼
- spring cloud 路由
- OpenShift 4 - 在控制台中安装使用 Web Terminal
- 【个性化阅读】ZapTxt的提醒姗姗来迟
- java界面中加载图片,Java登录界面中添加背景图片,程序无错,但加载不了图片,求帮忙...
- 微波网络转移参量[A]表示阻抗矩阵[Z]和导纳矩阵[Y]
- android ios9 rom,安卓党也能用上IOS9了 奇兔刷机首发24款机型仿IOS9 ROM
- JWT实现接口双重认证,提供安全又不复杂的接口安全能力
- Gradle报 skkiped gradle skipped due to earlier error
- Cassandra在海量数据存储及大型项目案例介绍-part1
- 一台计算机怎样介绍自己,一台电脑的自我介绍作文
- 利用FPGA实现简单的CPU
- 【Android 屏幕适配】屏幕适配基础概念 ② ( 像素 px 与 密度无关像素 dip | 像素 px 与 密度无关像素 dip 在不同屏幕像素密度 dpi 下的换算关系 )
- c#语法糖模式匹配【switch 表达式】
- 计算机听评课会议记录,研修评课议课会议记录
- win10任务栏图标无法固定,也无法取消固定,
- NCBI上查看SNP位点在哪个基因座上(locus)
- AOSP 8.0 系统启动之四ART虚拟机启动(一)
- 02【ArcGIS Pro SDK for Microsoft .NET】开发实现登录页面
热门文章
- Spring MVC工作原理
- 部署shiro官方源码时,执行maven命令出错
- Spring入门(三)之IoC
- JDBC连接数据库教程,postgreSQL
- 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
- 中国有超级计算机的大学,计算机专业排名看超算实力,ASC竞赛五大高校排名,中山大学第一...
- vue 字典_【开源】基于Vue的前端组件库HeyUI
- 一文搞懂ThreadLocal及相关的内存泄露问题
- 如何用JS实现音乐播放、暂停
- jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?