本文整理自网络,侵删。
在软件开发过程中,有时开发人员花费大量时间来创建数据结构,域类,XML,GUI布局,输出流等。有时用于创建这些特定需求的代码导致在许多地方重复相同的代码片段。这是Groovy的建设者发挥作用。Groovy有可以用来创建标准对象和结构的构建器。这些构建器节省了时间,因为开发人员不需要编写自己的代码来创建这些构建器。在本章的教程中,我们将看看groovy中可用的不同构建器。
Swing 构建器
在groovy中,还可以使用groovy中提供的swing构建器创建图形用户界面。开发swing组件的主要类是SwingBuilder类。这个类有许多方法创建图形组件,如 -
JFrame - 这是用于创建框架元素。
JTextField - 这用于创建textfield组件。
让我们看一个简单的例子,如何使用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)
上述程序的输出如下。单击任一按钮时,所需的消息将发送到控制台日志屏幕。
相关阅读 >>
更多相关阅读请进入《Groovy》频道 >>
深入理解Java虚拟机 JVM高级特性与实践 周志明 第3版
这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典。