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