Groovy - ผู้สร้าง
ในระหว่างขั้นตอนการพัฒนาซอฟต์แวร์บางครั้งนักพัฒนาใช้เวลาส่วนใหญ่ในการสร้างโครงสร้างข้อมูลคลาสโดเมน XML เลย์เอาต์ GUI สตรีมเอาต์พุตและบางครั้งโค้ดที่ใช้สร้างข้อกำหนดเฉพาะเหล่านี้ส่งผลให้เกิดการเปลี่ยนข้อมูลโค้ดเดียวกันของ code ในหลาย ๆ ที่ นี่คือจุดที่ผู้สร้าง Groovy เข้ามามีบทบาท Groovy มีผู้สร้างซึ่งสามารถใช้สร้างวัตถุและโครงสร้างมาตรฐานได้ เครื่องมือสร้างเหล่านี้ช่วยประหยัดเวลาเนื่องจากนักพัฒนาไม่จำเป็นต้องเขียนโค้ดของตนเองเพื่อสร้างตัวสร้างเหล่านี้ ใน couse ของบทนี้เราจะดูผู้สร้างต่างๆที่มีอยู่ใน groovy
ตัวสร้างวงสวิง
นอกจากนี้คุณยังสามารถสร้างส่วนต่อประสานผู้ใช้แบบกราฟิกโดยใช้ตัวสร้างวงสวิงที่มีอยู่ใน groovy คลาสหลักสำหรับการพัฒนาส่วนประกอบของวงสวิงคือคลาส SwingBuilder คลาสนี้มีหลายวิธีในการสร้างส่วนประกอบกราฟิกเช่น -
JFrame - ใช้สำหรับสร้างองค์ประกอบเฟรม
JTextField - ใช้สำหรับสร้างคอมโพเนนต์ฟิลด์ข้อความ
ลองดูตัวอย่างง่ายๆในการสร้างแอปพลิเคชัน Swing โดยใช้คลาส SwingBuilder ในตัวอย่างต่อไปนี้คุณจะเห็นประเด็นต่อไปนี้ -
คุณต้องนำเข้าคลาส groovy.swing.SwingBuilder และ javax.swing. *
ส่วนประกอบทั้งหมดที่แสดงในแอปพลิเคชัน Swing เป็นส่วนหนึ่งของคลาส SwingBuilder
สำหรับเฟรมเองคุณสามารถระบุตำแหน่งเริ่มต้นและขนาดของเฟรมได้ คุณยังสามารถระบุชื่อของเฟรม
คุณต้องตั้งค่าคุณสมบัติการเปิดเผยเป็นจริงเพื่อให้แสดงเฟรมได้
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
ลองดูตัวอย่างถัดไปของเราสำหรับการสร้างหน้าจอป้อนข้อมูลด้วยกล่องข้อความ ในตัวอย่างต่อไปนี้เราต้องการสร้างแบบฟอร์มที่มีกล่องข้อความสำหรับชื่อนักเรียนเรื่องและชื่อโรงเรียน ในตัวอย่างต่อไปนี้คุณสามารถดูประเด็นสำคัญต่อไปนี้ -
- เรากำลังกำหนดเค้าโครงสำหรับการควบคุมของเราบนหน้าจอ ในกรณีนี้เรากำลังใช้เค้าโครงกริด
- เรากำลังใช้คุณสมบัติการจัดตำแหน่งสำหรับป้ายกำกับของเรา
- เรากำลังใช้เมธอด textField เพื่อแสดง textboxes บนหน้าจอ
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)
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
ตัวจัดการเหตุการณ์
ตอนนี้เรามาดูตัวจัดการเหตุการณ์ ตัวจัดการเหตุการณ์ใช้สำหรับปุ่มเพื่อดำเนินการประมวลผลบางประเภทเมื่อกดปุ่ม แต่ละปุ่มเรียก pseudomethod ประกอบด้วยพารามิเตอร์ 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)
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง เมื่อคุณคลิกที่ปุ่มใดปุ่มหนึ่งข้อความที่ต้องการจะถูกส่งไปยังหน้าจอบันทึกของคอนโซล
อีกรูปแบบหนึ่งของตัวอย่างข้างต้นคือการกำหนดวิธีการที่สามารถทำหน้าที่เป็นตัวจัดการ ในตัวอย่างต่อไปนี้เรากำลังกำหนดตัวจัดการ 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
ตัวสร้าง 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 ใช้สำหรับการสร้างต้นไม้ที่ซ้อนกันของอ็อบเจ็กต์โหนดสำหรับจัดการข้อมูลโดยพลการ ตัวอย่างการใช้งาน 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"')
}
}
}
จากการทำงานของโค้ดด้านบนไฟล์ที่เรียกว่า sample.txt จะถูกสร้างขึ้นในโฟลเดอร์ main / submain / Tutorial และไฟล์ sample.txt จะมีข้อความ“ Hello World”