В процессе разработки программного обеспечения иногда разработчики тратят много времени на создание структур данных, классов доменов, XML, макетов графического интерфейса пользователя, потоков вывода и т. Д. Иногда код, используемый для создания этих конкретных требований, приводит к повторению одного и того же фрагмента кода. код во многих местах. Здесь строители Groovy вступают в игру. В Groovy есть строители, которые можно использовать для создания стандартных объектов и структур. Эти сборщики экономят время, так как разработчикам не нужно писать собственный код для создания этих сборщиков. В этой главе мы рассмотрим различные конструкторы, доступные в Groovy.
Качели Строитель
В groovy также можно создавать графические пользовательские интерфейсы, используя свинг-компоновщики, доступные в groovy. Основным классом для разработки компонентов Swing является класс SwingBuilder. Этот класс имеет много методов для создания графических компонентов, таких как —
-
JFrame — это для создания элемента frame.
-
JTextField — используется для создания компонента текстового поля .
JFrame — это для создания элемента frame.
JTextField — используется для создания компонента текстового поля .
Давайте рассмотрим простой пример того, как создать приложение Swing, используя класс SwingBuilder. В следующем примере вы можете увидеть следующие пункты —
-
Вам необходимо импортировать классы groovy.swing.SwingBuilder и javax.swing. *.
-
Все компоненты, отображаемые в приложении Swing, являются частью класса SwingBuilder.
-
Для самого кадра вы можете указать начальное расположение и размер кадра. Вы также можете указать заголовок кадра.
-
Вам нужно установить для свойства Visibility значение true, чтобы фрейм отображался.
Вам необходимо импортировать классы 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 вместе с JLabel с текстом Hello World.
Давайте посмотрим на наш следующий пример для создания экрана ввода с текстовыми полями. В следующем примере мы хотим создать форму с текстовыми полями для имени ученика, предмета и названия школы. В следующем примере вы можете увидеть следующие ключевые моменты —
- Мы определяем макет для наших элементов управления на экране. В этом случае мы используем Grid Layout.
- Мы используем свойство выравнивания для наших меток.
- Мы используем метод 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 и определяем замыкание для отправки некоторого вывода на консоль при нажатии кнопки.
Для каждой определенной кнопки мы используем метод 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)
Вывод вышеуказанной программы приведен ниже. При нажатии на любую кнопку необходимое сообщение отправляется на экран журнала консоли.
Другой вариант приведенного выше примера заключается в определении методов, которые могут выступать в качестве обработчиков. В следующем примере мы определяем 2 обработчика DisplayA и DisplayB.
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 Builder
Конструктор DOM может использоваться для анализа HTML, XHTML и XML и преобразования его в дерево DOM W3C.
В следующем примере показано, как можно использовать построитель 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
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 — это компоновщик для создания структуры каталогов файлов из спецификации. Ниже приведен пример использования 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 будет создан файл с именем sample.txt. И в файле sample.txt будет текст «Hello World».