AWT 이벤트 처리
이벤트 란?
객체 상태의 변화를 이벤트라고합니다. 즉, 이벤트는 소스 상태의 변화를 설명합니다. 그래픽 사용자 인터페이스 구성 요소와의 사용자 상호 작용의 결과로 이벤트가 생성됩니다. 예를 들어 버튼 클릭, 마우스 이동, 키보드를 통한 문자 입력, 목록에서 항목 선택, 페이지 스크롤 등이 이벤트를 발생시키는 활동입니다.
이벤트 유형
이벤트는 크게 두 가지 범주로 분류 할 수 있습니다.
Foreground Events-사용자의 직접적인 상호 작용이 필요한 이벤트로, 그래픽 사용자 인터페이스에서 그래픽 구성 요소와 상호 작용하는 사람의 결과로 생성됩니다. 예를 들어 버튼 클릭, 마우스 이동, 키보드를 통한 문자 입력, 목록에서 항목 선택, 페이지 스크롤 등이 있습니다.
Background Events-최종 사용자의 상호 작용이 필요한 이벤트를 백그라운드 이벤트라고합니다. 운영 체제 인터럽트, 하드웨어 또는 소프트웨어 오류, 타이머 만료, 작업 완료 등이 백그라운드 이벤트의 예입니다.
이벤트 처리 란 무엇입니까?
이벤트 처리는 이벤트를 제어하고 이벤트가 발생할 경우 어떤 일이 발생해야하는지 결정하는 메커니즘입니다. 이 메커니즘에는 이벤트가 발생할 때 실행되는 이벤트 처리기로 알려진 코드가 있습니다. Java는 위임 이벤트 모델을 사용하여 이벤트를 처리합니다. 이 모델은 이벤트를 생성하고 처리하는 표준 메커니즘을 정의합니다.이 모델에 대해 간략하게 소개하겠습니다.
위임 이벤트 모델에는 다음과 같은 주요 참가자가 있습니다.
Source-소스는 이벤트가 발생하는 객체입니다. Source는 발생한 이벤트에 대한 정보를 자신의 핸들러에 제공 할 책임이 있습니다. Java는 소스 객체에 대한 클래스와 마찬가지로 제공합니다.
Listener-이벤트 핸들러라고도하며 리스너는 이벤트에 대한 응답을 생성합니다. Java 구현 관점에서 리스너도 객체입니다. 리스너는 이벤트를받을 때까지 기다립니다. 이벤트가 수신되면 리스너는 이벤트를 처리 한 다음 반환합니다.
이 접근 방식의 이점은 사용자 인터페이스 논리가 이벤트를 생성하는 논리와 완전히 분리된다는 것입니다. 사용자 인터페이스 요소는 이벤트 처리를 별도의 코드로 위임 할 수 있습니다. 이 모델에서는 리스너가 이벤트 알림을 수신 할 수 있도록 소스 객체에 리스너를 등록해야합니다. 이는 이벤트 알림을 수신하려는 리스너에게만 전송되기 때문에 이벤트를 처리하는 효율적인 방법입니다.
이벤트 처리와 관련된 단계
사용자가 버튼을 클릭하면 이벤트가 생성됩니다.
이제 해당 이벤트 클래스의 객체가 자동으로 생성되고 소스 및 이벤트에 대한 정보가 동일한 객체에 채워집니다.
이벤트 객체는 등록 된 리스너 클래스의 메소드로 전달됩니다.
이제 메서드가 실행되고 반환됩니다.
청취자에 대해 기억해야 할 사항
리스너 클래스를 디자인하려면 리스너 인터페이스를 개발해야합니다. 이러한 Listener 인터페이스는 리스너 클래스에 의해 구현되어야하는 일부 공개 추상 콜백 메서드를 예측합니다.
미리 정의 된 인터페이스를 구현하지 않으면 클래스가 소스 객체에 대한 리스너 클래스로 작동 할 수 없습니다.
콜백 방법
API 제공자가 제공하고 애플리케이션 프로그래머가 정의하고 애플리케이션 개발자가 호출하는 메소드입니다. 여기서 콜백 메서드는 이벤트 메서드를 나타냅니다. 이벤트에 대한 응답으로 java jre는 콜백 메소드를 실행합니다. 이러한 모든 콜백 메서드는 리스너 인터페이스에서 제공됩니다.
구성 요소가 일부 리스너가 이벤트를 수신하기를 원하면 소스는 리스너에 자신을 등록해야합니다.
이벤트 처리 예
원하는 편집기를 사용하여 다음 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
다음 출력을 확인하십시오.