Учебники

Groovy — Строители

В процессе разработки программного обеспечения иногда разработчики тратят много времени на создание структур данных, классов доменов, 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.

JLabel с текстом

Давайте посмотрим на наш следующий пример для создания экрана ввода с текстовыми полями. В следующем примере мы хотим создать форму с текстовыми полями для имени ученика, предмета и названия школы. В следующем примере вы можете увидеть следующие ключевые моменты —

  • Мы определяем макет для наших элементов управления на экране. В этом случае мы используем 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.

Live Demo

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.

Live Demo

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».