Groovy-빌더

소프트웨어 개발 과정에서 때때로 개발자는 데이터 구조, 도메인 클래스, XML, GUI 레이아웃, 출력 스트림 등을 생성하는 데 많은 시간을 할애하고 때로는 이러한 특정 요구 사항을 생성하는 데 사용되는 코드로 인해 동일한 스 니펫이 반복됩니다. 많은 곳에서 코드. 이것은 Groovy 빌더가 작동하는 곳입니다. Groovy에는 표준 개체 및 구조를 만드는 데 사용할 수있는 빌더가 있습니다. 이러한 빌더는 개발자가 이러한 빌더를 생성하기 위해 자체 코드를 작성할 필요가 없기 때문에 시간을 절약합니다. 이 장에서는 그루비에서 사용할 수있는 다양한 빌더를 살펴 보겠습니다.

스윙 빌더

groovy에서는 groovy에서 사용 가능한 스윙 빌더를 사용하여 그래픽 사용자 인터페이스를 만들 수도 있습니다. 스윙 컴포넌트 개발을위한 메인 클래스는 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)

위 프로그램의 출력은 다음과 같습니다. 다음 출력은 Hello World라는 텍스트가있는 JLabel과 함께 JFrame을 보여줍니다.

텍스트 상자가있는 입력 화면을 만드는 다음 예제를 살펴 보겠습니다. 다음 예제에서는 학생 이름, 과목 및 학교 이름에 대한 텍스트 상자가있는 양식을 작성하려고합니다. 다음 예에서 다음과 같은 핵심 사항을 볼 수 있습니다.

  • 화면에서 컨트롤의 레이아웃을 정의하고 있습니다. 이 경우 그리드 레이아웃을 사용하고 있습니다.
  • 레이블에 정렬 속성을 사용하고 있습니다.
  • 화면에 텍스트 상자를 표시하기 위해 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의 두 처리기를 정의합니다.

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

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”라는 텍스트가 있습니다.