- Groovy 教程
- Groovy - 主页
- Groovy - 概述
- Groovy - 环境
- Groovy - 基本语法
- Groovy - 数据类型
- Groovy - 变量
- Groovy - 运算符
- Groovy - 循环
- Groovy - 决策
- Groovy - 方法
- Groovy - 文件 I/O
- Groovy - 可选
- Groovy - 数字
- Groovy - 字符串
- Groovy - 范围
- Groovy - 列表
- Groovy - 地图
- Groovy - 日期和时间
- Groovy - 正则表达式
- Groovy - 异常处理
- Groovy - 面向对象
- Groovy - 泛型
- Groovy - 特征
- Groovy - 闭包
- Groovy - 注释
- Groovy-XML
- Groovy-JMX
- Groovy - JSON
- Groovy-DSLS
- Groovy - 数据库
- Groovy - 构建者
- Groovy - 命令行
- Groovy - 单元测试
- Groovy - 模板引擎
- Groovy - 元对象编程
- Groovy 有用的资源
- Groovy - 快速指南
- Groovy - 有用的资源
- Groovy - 讨论
Groovy - 构建者
在软件开发过程中,有时开发人员会花费大量时间来创建数据结构、领域类、XML、GUI 布局、输出流等。有时,用于创建这些特定需求的代码会导致相同片段的重复。很多地方都有代码。这就是 Groovy 构建器发挥作用的地方。Groovy 具有可用于创建标准对象和结构的构建器。这些构建器可以节省时间,因为开发人员不需要编写自己的代码来创建这些构建器。在本章中,我们将了解 groovy 中可用的不同构建器。
摇摆生成器
在 groovy 中,我们还可以使用 groovy 中提供的 swing 构建器创建图形用户界面。开发 Swing 组件的主要类是 SwingBuilder 类。此类有许多创建图形组件的方法,例如 -
JFrame - 用于创建框架元素。
JTextField - 用于创建文本字段组件。
让我们看一个简单的示例,了解如何使用 SwingBuilder 类创建 Swing 应用程序。在下面的示例中,您可以看到以下几点 -
您需要导入 groovy.swing.SwingBuilder 和 javax.swing.* 类。
Swing 应用程序中显示的所有组件都是 SwingBuilder 类的一部分。
对于框架本身,您可以指定框架的初始位置和大小。您还可以指定框架的标题。
您需要将 Visibility 属性设置为 true 才能显示框架。
import groovy.swing.SwingBuilder import javax.swing.* // Create a builder def myapp = new SwingBuilder() // Compose the builder def myframe = myapp.frame(title : 'Tutorials Point', location : [200, 200], size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE { label(text : 'Hello world') } // The following statement is used for displaying the form frame.setVisible(true)
上述程序的输出如下所示。以下输出显示了一个 JFrame 以及一个带有 Hello World 文本的 JLabel。
让我们看一下创建带有文本框的输入屏幕的下一个示例。在下面的示例中,我们要创建一个表单,其中包含学生姓名、科目和学校名称的文本框。在下面的示例中,您可以看到以下关键点 -
- 我们正在为屏幕上的控件定义布局。在本例中,我们使用网格布局。
- 我们正在为标签使用对齐属性。
- 我们使用 textField 方法在屏幕上显示文本框。
import groovy.swing.SwingBuilder import javax.swing.* import java.awt.* // Create a builder def myapp = new SwingBuilder() // Compose the builder def myframe = myapp.frame(title : 'Tutorials Point', location : [200, 200], size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE) { panel(layout: new GridLayout(3, 2, 5, 5)) { label(text : 'Student Name:', horizontalAlignment : JLabel.RIGHT) textField(text : '', columns : 10) label(text : 'Subject Name:', horizontalAlignment : JLabel.RIGHT) textField(text : '', columns : 10) label(text : 'School Name:', horizontalAlignment : JLabel.RIGHT) textField(text : '', columns : 10) } } // The following statement is used for displaying the form myframe.setVisible(true)
上述程序的输出如下 -
事件处理程序
现在让我们看看事件处理程序。事件处理程序用于按钮在按下按钮时执行某种处理。每个按钮伪方法调用都包含 actionPerformed 参数。这表示作为闭包呈现的代码块。
让我们看一下创建带有 2 个按钮的屏幕的下一个示例。当按下任一按钮时,相应的消息就会发送到控制台屏幕。在下面的示例中,您可以看到以下关键点 -
对于定义的每个按钮,我们使用 actionPerformed 方法并定义一个闭包,以便在单击按钮时将一些输出发送到控制台。
import groovy.swing.SwingBuilder import javax.swing.* import java.awt.* def myapp = new SwingBuilder() def buttonPanel = { myapp.panel(constraints : BorderLayout.SOUTH) { button(text : 'Option A', actionPerformed : { println 'Option A chosen' }) button(text : 'Option B', actionPerformed : { println 'Option B chosen' }) } } def mainPanel = { myapp.panel(layout : new BorderLayout()) { label(text : 'Which Option do you want', horizontalAlignment : JLabel.CENTER, constraints : BorderLayout.CENTER) buttonPanel() } } def myframe = myapp.frame(title : 'Tutorials Point', location : [100, 100], size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE){ mainPanel() } myframe.setVisible(true)
上述程序的输出如下所示。当您单击任一按钮时,所需的消息将发送到控制台日志屏幕。
上述示例的另一个变体是定义可以充当处理程序的方法。在下面的示例中,我们定义了 DisplayA 和 DisplayB 的 2 个处理程序。
import groovy.swing.SwingBuilder import javax.swing.* import java.awt.* def myapp = new SwingBuilder() def DisplayA = { println("Option A") } def DisplayB = { println("Option B") } def buttonPanel = { myapp.panel(constraints : BorderLayout.SOUTH) { button(text : 'Option A', actionPerformed : DisplayA) button(text : 'Option B', actionPerformed : DisplayB) } } def mainPanel = { myapp.panel(layout : new BorderLayout()) { label(text : 'Which Option do you want', horizontalAlignment : JLabel.CENTER, constraints : BorderLayout.CENTER) buttonPanel() } } def myframe = myapp.frame(title : 'Tutorials Point', location : [100, 100], size : [400, 300], defaultCloseOperation : WindowConstants.EXIT_ON_CLOSE) { mainPanel() } myframe.setVisible(true)
上述程序的输出将与前面的示例保持相同。
DOM生成器
DOM 构建器可用于解析 HTML、XHTML 和 XML,并将其转换为 W3C DOM 树。
以下示例显示了如何使用 DOM 构建器。
String records = ''' <library> <Student> <StudentName division = 'A'>Joe</StudentName> <StudentID>1</StudentID> </Student> <Student> <StudentName division = 'B'>John</StudentName> <StudentID>2</StudentID> </Student> <Student> <StudentName division = 'C'>Mark</StudentName> <StudentID>3</StudentID> </Student> </library>''' def rd = new StringReader(records) def doc = groovy.xml.DOMBuilder.parse(rd)
JsonBuilder
JsonBuilder用于创建json类型对象。
以下示例显示了如何使用 Json 构建器。
def builder = new groovy.json.JsonBuilder() def root = builder.students { student { studentname 'Joe' studentid '1' Marks( Subject1: 10, Subject2: 20, Subject3:30, ) } } println(builder.toString());
上述程序的输出如下所示。输出 clearlt 显示 Jsonbuilder 能够从一组结构化节点构建 json 对象。
{"students":{"student":{"studentname":"Joe","studentid":"1","Marks":{"Subject1":10, "S ubject2":20,"Subject3":30}}}}
jsonbuilder 还可以接收列表并将其转换为 json 对象。以下示例展示了如何实现这一点。
def builder = new groovy.json.JsonBuilder() def lst = builder([1, 2, 3]) println(builder.toString());
上述程序的输出如下所示。
[1,2,3]
jsonBuilder 也可用于类。以下示例展示了类的对象如何成为 json 构建器的输入。
def builder = new groovy.json.JsonBuilder() class Student { String name } def studentlist = [new Student (name: "Joe"), new Student (name: "Mark"), new Student (name: "John")] builder studentlist, { Student student ->name student.name} println(builder)
上述程序的输出如下所示。
[{"name":"Joe"},{"name":"Mark"},{"name":"John"}]
节点生成器
NodeBuilder 用于创建 Node 对象的嵌套树以处理任意数据。Nodebuilder 的使用示例如下所示。
def nodeBuilder = new NodeBuilder() def studentlist = nodeBuilder.userlist { user(id: '1', studentname: 'John', Subject: 'Chemistry') user(id: '2', studentname: 'Joe', Subject: 'Maths') user(id: '3', studentname: 'Mark', Subject: 'Physics') } println(studentlist)
文件树生成器
FileTreeBuilder 是一个用于根据规范生成文件目录结构的构建器。以下是如何使用 FileTreeBuilder 的示例。
tmpDir = File.createTempDir() def fileTreeBuilder = new FileTreeBuilder(tmpDir) fileTreeBuilder.dir('main') { dir('submain') { dir('Tutorial') { file('Sample.txt', 'println "Hello World"') } } }
执行上述代码后,将在文件夹 main/submain/Tutorial 中创建一个名为 example.txt 的文件。Sample.txt 文件将包含“Hello World”文本。