Obsługa zdarzeń AWT
Co to jest wydarzenie?
Zmiana stanu obiektu nazywana jest zdarzeniem, tzn. Zdarzenie opisuje zmianę stanu źródła. Zdarzenia są generowane w wyniku interakcji użytkownika z elementami graficznego interfejsu użytkownika. Na przykład kliknięcie przycisku, poruszenie myszą, wpisanie znaku z klawiatury, wybranie pozycji z listy, przewijanie strony to czynności, które powodują wystąpienie zdarzenia.
Rodzaje wydarzeń
Zdarzenia można ogólnie podzielić na dwie kategorie:
Foreground Events- Zdarzenia, które wymagają bezpośredniej interakcji użytkownika i są generowane jako konsekwencja interakcji osoby z elementami graficznymi w graficznym interfejsie użytkownika. Na przykład kliknięcie przycisku, poruszenie myszą, wpisanie znaku z klawiatury, wybranie pozycji z listy, przewijanie strony itp.
Background Events- Te zdarzenia, które wymagają interakcji użytkownika końcowego, nazywane są zdarzeniami w tle. Przerwania systemu operacyjnego, awaria sprzętu lub oprogramowania, upływ czasu, zakończenie operacji są przykładem zdarzeń w tle.
Co to jest obsługa zdarzeń?
Obsługa zdarzeń to mechanizm, który kontroluje zdarzenie i decyduje, co powinno się stać, jeśli wystąpi zdarzenie. Ten mechanizm ma kod, który jest znany jako moduł obsługi zdarzeń, który jest wykonywany, gdy wystąpi zdarzenie. Java używa modelu zdarzenia delegacji do obsługi zdarzeń. Ten model definiuje standardowy mechanizm generowania i obsługi zdarzeń. Krótkie wprowadzenie do tego modelu.
Model delegacji ma następujących kluczowych uczestników, a mianowicie:
Source- Źródłem jest obiekt, na którym zachodzi zdarzenie. Źródło jest odpowiedzialne za dostarczanie informacji o wystąpieniu zdarzenia do jego obsługi. Java dostarcza podobnie jak klasy dla obiektu źródłowego.
Listener- Jest również znany jako moduł obsługi zdarzeń, który jest odpowiedzialny za generowanie odpowiedzi na zdarzenie. Z punktu widzenia implementacji Java, słuchacz jest również obiektem. Odbiornik czeka, aż otrzyma zdarzenie. Po odebraniu zdarzenia odbiornik przetwarza je, a następnie wraca.
Zaletą tego podejścia jest to, że logika interfejsu użytkownika jest całkowicie oddzielona od logiki, która generuje zdarzenie. Element interfejsu użytkownika może delegować przetwarzanie zdarzenia do oddzielnego fragmentu kodu. W tym modelu Listener musi być zarejestrowany w obiekcie źródłowym, aby odbiornik mógł otrzymać powiadomienie o zdarzeniu. Jest to skuteczny sposób obsługi zdarzenia, ponieważ powiadomienia o zdarzeniach są wysyłane tylko do tych słuchaczy, którzy chcą je otrzymywać.
Kroki związane z obsługą zdarzenia
Użytkownik klika przycisk i generowane jest zdarzenie.
Teraz obiekt danej klasy zdarzenia jest tworzony automatycznie, a informacje o źródle i zdarzeniu są wypełniane w tym samym obiekcie.
Obiekt zdarzenia jest przekazywany do metody zarejestrowanej klasy detektora.
metoda jest teraz wykonywana i zwraca.
Punkty, o których należy pamiętać o słuchaczu
Aby zaprojektować klasę listenera, musimy opracować interfejsy listenera, które przewidują kilka publicznych abstrakcyjnych metod wywołania zwrotnego, które muszą być implementowane przez klasę listener.
Jeśli nie zaimplementujesz any if z predefiniowanymi interfejsami, twoja klasa nie będzie mogła działać jako klasa nasłuchująca dla obiektu źródłowego.
Metody oddzwaniania
Są to metody, które są dostarczane przez dostawcę API i są definiowane przez programistę aplikacji i wywoływane przez dewelopera aplikacji. Tutaj metody wywołania zwrotnego reprezentują metodę zdarzenia. W odpowiedzi na zdarzenie java jre uruchomi metodę callback. Wszystkie takie metody wywołania zwrotnego są dostępne w interfejsach nasłuchiwania.
Jeśli komponent chce, aby jakiś słuchacz nasłuchiwał jego zdarzeń, źródło musi zarejestrować się w słuchaczu.
Przykład obsługi zdarzeń
Utwórz następujący program java, używając dowolnego wybranego edytora, powiedzmy 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.");
}
}
}
}
Skompiluj program za pomocą wiersza poleceń. Iść doD:/ > AWT i wpisz następujące polecenie.
D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java
Jeśli nie wystąpi błąd, oznacza to, że kompilacja się powiodła. Uruchom program za pomocą następującego polecenia.
D:\AWT>java com.tutorialspoint.gui.AwtControlDemo
Sprawdź następujące dane wyjściowe