การจัดการเหตุการณ์ AWT
เหตุการณ์คืออะไร?
การเปลี่ยนแปลงสถานะของวัตถุเรียกว่าเหตุการณ์เช่นเหตุการณ์อธิบายการเปลี่ยนแปลงสถานะของแหล่งที่มา เหตุการณ์ถูกสร้างขึ้นจากการโต้ตอบของผู้ใช้กับคอมโพเนนต์ส่วนติดต่อผู้ใช้แบบกราฟิก ตัวอย่างเช่นคลิกที่ปุ่มเลื่อนเมาส์ป้อนอักขระผ่านแป้นพิมพ์เลือกรายการจากรายการการเลื่อนหน้าเป็นกิจกรรมที่ทำให้เกิดเหตุการณ์
ประเภทของเหตุการณ์
เหตุการณ์สามารถแบ่งออกเป็นสองประเภทอย่างกว้าง ๆ :
Foreground Events- เหตุการณ์เหล่านั้นที่ต้องการการโต้ตอบโดยตรงของผู้ใช้สิ่งเหล่านี้สร้างขึ้นจากผลที่ตามมาของบุคคลที่โต้ตอบกับส่วนประกอบกราฟิกในส่วนติดต่อผู้ใช้แบบกราฟิก ตัวอย่างเช่นคลิกที่ปุ่มเลื่อนเมาส์ป้อนอักขระผ่านแป้นพิมพ์เลือกรายการจากรายการเลื่อนหน้าเป็นต้น
Background Events- เหตุการณ์ที่ต้องการการโต้ตอบของผู้ใช้ปลายทางเรียกว่าเหตุการณ์พื้นหลัง การขัดจังหวะของระบบปฏิบัติการความล้มเหลวของฮาร์ดแวร์หรือซอฟต์แวร์ตัวจับเวลาหมดอายุการดำเนินการเสร็จสิ้นเป็นตัวอย่างของเหตุการณ์เบื้องหลัง
Event Handling คืออะไร?
การจัดการเหตุการณ์เป็นกลไกที่ควบคุมเหตุการณ์และตัดสินใจว่าจะเกิดอะไรขึ้นหากเหตุการณ์เกิดขึ้น กลไกนี้มีรหัสซึ่งเรียกว่าตัวจัดการเหตุการณ์ที่ดำเนินการเมื่อมีเหตุการณ์เกิดขึ้น Java ใช้ Delegation Event Model เพื่อจัดการกับเหตุการณ์ โมเดลนี้กำหนดกลไกมาตรฐานในการสร้างและจัดการกับเหตุการณ์ต่างๆเรามาดูข้อมูลเบื้องต้นคร่าวๆของโมเดลนี้กัน
Delegation Event Model มีผู้เข้าร่วมหลักดังต่อไปนี้:
Source- แหล่งที่มาคือวัตถุที่เหตุการณ์เกิดขึ้น แหล่งที่มามีหน้าที่ในการให้ข้อมูลของเหตุการณ์ที่เกิดขึ้นแก่ผู้ดูแล Java จัดเตรียมเช่นเดียวกับคลาสสำหรับอ็อบเจ็กต์ต้นทาง
Listener- เรียกอีกอย่างว่าตัวจัดการเหตุการณ์ Listener มีหน้าที่สร้างการตอบสนองต่อเหตุการณ์ จากมุมมองการใช้งาน java ผู้ฟังยังเป็นวัตถุ ผู้ฟังรอจนกว่าจะได้รับเหตุการณ์ เมื่อได้รับเหตุการณ์แล้วผู้ฟังจะประมวลผลเหตุการณ์แล้วส่งกลับ
ประโยชน์ของแนวทางนี้คือตรรกะของอินเทอร์เฟซผู้ใช้จะแยกออกจากตรรกะที่สร้างเหตุการณ์โดยสิ้นเชิง องค์ประกอบอินเทอร์เฟซผู้ใช้สามารถมอบหมายการประมวลผลเหตุการณ์ให้กับส่วนของโค้ดที่แยกจากกันได้ ในโมเดลนี้ Listener จะต้องลงทะเบียนกับวัตถุต้นทางเพื่อให้ผู้ฟังสามารถรับการแจ้งเตือนเหตุการณ์ได้ นี่เป็นวิธีที่มีประสิทธิภาพในการจัดการกิจกรรมเนื่องจากการแจ้งเตือนกิจกรรมจะถูกส่งไปยังผู้ฟังที่ต้องการรับเท่านั้น
ขั้นตอนที่เกี่ยวข้องกับการจัดการเหตุการณ์
ผู้ใช้คลิกปุ่มและเหตุการณ์จะถูกสร้างขึ้น
ตอนนี้อ็อบเจ็กต์ของคลาสเหตุการณ์ที่เกี่ยวข้องถูกสร้างขึ้นโดยอัตโนมัติและข้อมูลเกี่ยวกับซอร์สและเหตุการณ์จะถูกเติมในอ็อบเจ็กต์เดียวกัน
อ็อบเจ็กต์เหตุการณ์ถูกส่งต่อไปยังเมธอดของคลาส Listener ที่ลงทะเบียน
ตอนนี้วิธีการได้รับการดำเนินการและส่งคืน
ข้อควรจำเกี่ยวกับผู้ฟัง
ในการออกแบบคลาสผู้ฟังเราต้องพัฒนาอินเทอร์เฟซสำหรับผู้ฟังบางส่วนอินเทอร์เฟซ Listener เหล่านี้คาดการณ์วิธีการโทรกลับนามธรรมสาธารณะบางอย่างซึ่งคลาสผู้ฟังจะต้องดำเนินการ
หากคุณไม่ใช้อินเทอร์เฟซใด ๆ ที่กำหนดไว้ล่วงหน้าคลาสของคุณจะไม่สามารถทำหน้าที่เป็นคลาสตัวฟังสำหรับอ็อบเจ็กต์ต้นทาง
วิธีการโทรกลับ
นี่คือวิธีการที่ผู้ให้บริการ API จัดเตรียมไว้และกำหนดโดยโปรแกรมเมอร์แอปพลิเคชันและเรียกใช้โดยนักพัฒนาแอปพลิเคชัน วิธีการโทรกลับแสดงถึงวิธีเหตุการณ์ ในการตอบสนองต่อเหตุการณ์ java jre จะเรียกใช้เมธอดการโทรกลับ วิธีการโทรกลับทั้งหมดดังกล่าวมีให้ในอินเตอร์เฟส Listener
หากส่วนประกอบต้องการให้ผู้ฟังบางคนฟังเหตุการณ์นั้นแหล่งที่มาจะต้องลงทะเบียนตัวเองกับผู้ฟัง
ตัวอย่างการจัดการเหตุการณ์
สร้างโปรแกรม java ต่อไปนี้โดยใช้โปรแกรมแก้ไขที่คุณเลือกในการพูด D:/ > AWT > com > tutorialspoint > gui >
AwtControlDemo.javapackage com.tutorialspoint.gui;
import java.awt.*;
import java.awt.event.*;
public class AwtControlDemo {
private Frame mainFrame;
private Label headerLabel;
private Label statusLabel;
private Panel controlPanel;
public AwtControlDemo(){
prepareGUI();
}
public static void main(String[] args){
AwtControlDemo awtControlDemo = new AwtControlDemo();
awtControlDemo.showEventDemo();
}
private void prepareGUI(){
mainFrame = new Frame("Java AWT Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
headerLabel = new Label();
headerLabel.setAlignment(Label.CENTER);
statusLabel = new Label();
statusLabel.setAlignment(Label.CENTER);
statusLabel.setSize(350,100);
controlPanel = new Panel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private void showEventDemo(){
headerLabel.setText("Control in action: Button");
Button okButton = new Button("OK");
Button submitButton = new Button("Submit");
Button cancelButton = new Button("Cancel");
okButton.setActionCommand("OK");
submitButton.setActionCommand("Submit");
cancelButton.setActionCommand("Cancel");
okButton.addActionListener(new ButtonClickListener());
submitButton.addActionListener(new ButtonClickListener());
cancelButton.addActionListener(new ButtonClickListener());
controlPanel.add(okButton);
controlPanel.add(submitButton);
controlPanel.add(cancelButton);
mainFrame.setVisible(true);
}
private class ButtonClickListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if( command.equals( "OK" )) {
statusLabel.setText("Ok Button clicked.");
}
else if( command.equals( "Submit" ) ) {
statusLabel.setText("Submit Button clicked.");
}
else {
statusLabel.setText("Cancel Button clicked.");
}
}
}
}
คอมไพล์โปรแกรมโดยใช้พร้อมรับคำสั่ง ไปที่D:/ > AWT และพิมพ์คำสั่งต่อไปนี้
D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java
หากไม่มีข้อผิดพลาดแสดงว่าการคอมไพล์สำเร็จ รันโปรแกรมโดยใช้คำสั่งต่อไปนี้
D:\AWT>java com.tutorialspoint.gui.AwtControlDemo
ตรวจสอบผลลัพธ์ต่อไปนี้