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”