AWT Olay İşleme

Etkinlik nedir?

Bir nesnenin durumundaki değişiklik olay olarak bilinir, yani olay, kaynak durumundaki değişikliği tanımlar. Olaylar, kullanıcının grafik kullanıcı arabirimi bileşenleriyle etkileşimi sonucunda oluşturulur. Örneğin, bir düğmeye tıklamak, fareyi hareket ettirmek, klavyeden bir karakter girmek, listeden bir öğe seçmek, sayfayı kaydırmak bir olayın gerçekleşmesine neden olan faaliyetlerdir.

Olay Türleri

Olaylar genel olarak iki kategoriye ayrılabilir:

  • Foreground Events- Kullanıcının doğrudan etkileşimini gerektiren olaylar, Grafik Kullanıcı Arayüzündeki grafik bileşenlerle etkileşimde bulunan bir kişinin sonucu olarak oluşturulurlar. Örneğin, bir düğmeye tıklamak, fareyi hareket ettirmek, klavyeden bir karakter girmek, listeden bir öğe seçmek, sayfayı kaydırmak vb.

  • Background Events- Son kullanıcının etkileşimini gerektiren olaylar, arka plan olayları olarak bilinir. İşletim sistemi kesintileri, donanım veya yazılım arızası, zamanlayıcının sona ermesi, bir işlemin tamamlanması arka plan olaylarına örnektir.

Olay İşleme nedir?

Olay İşleme, olayı kontrol eden ve bir olay meydana geldiğinde ne olacağına karar veren mekanizmadır. Bu mekanizma, bir olay gerçekleştiğinde yürütülen olay işleyicisi olarak bilinen koda sahiptir. Java, olayları işlemek için Delegation Event Modelini kullanır. Bu model, olayları oluşturmak ve işlemek için standart mekanizmayı tanımlar. Bu modele kısa bir giriş yapalım.

Delegasyon Olay Modeli aşağıdaki kilit katılımcılara sahiptir:

  • Source- Kaynak, olayın meydana geldiği nesnedir. Kaynak, meydana gelen olayın bilgilerini işleyicisine sağlamaktan sorumludur. Java, kaynak nesne için sınıflarda olduğu gibi sağlar.

  • Listener- Olay işleyicisi olarak da bilinir. Dinleyici, bir olaya yanıt oluşturmaktan sorumludur. Java uygulaması açısından dinleyici aynı zamanda bir nesnedir. Dinleyici, bir olay alana kadar bekler. Olay alındıktan sonra, dinleyici olayı işler ve ardından geri döner.

Bu yaklaşımın yararı, kullanıcı arabirimi mantığının olayı oluşturan mantıktan tamamen ayrılmasıdır. Kullanıcı arabirimi öğesi, bir olayın işlenmesini ayrı bir kod parçasına devredebilir. Bu modelde, dinleyicinin olay bildirimini alabilmesi için Dinleyicinin kaynak nesneyle kaydedilmesi gerekir. Bu, olayı ele almanın verimli bir yoludur çünkü olay bildirimleri yalnızca onları almak isteyen dinleyicilere gönderilir.

Olay işlemeye dahil olan adımlar

  • Kullanıcı düğmeye tıklar ve olay oluşturulur.

  • Artık ilgili olay sınıfının nesnesi otomatik olarak oluşturulur ve kaynak ve olay hakkındaki bilgiler aynı nesnede doldurulur.

  • Olay nesnesi, kayıtlı dinleyici sınıfının yöntemine iletilir.

  • yöntem artık yürütülür ve geri döner.

Dinleyici hakkında hatırlanması gereken noktalar

  • Bir dinleyici sınıfı tasarlamak için bazı dinleyici arabirimleri geliştirmeliyiz. Bu Dinleyici arabirimleri, dinleyici sınıfı tarafından uygulanması gereken bazı genel soyut geri çağrı yöntemlerini tahmin eder.

  • Önceden tanımlanmış arabirimler varsa herhangi birini uygulamazsanız, sınıfınız bir kaynak nesne için dinleyici sınıfı olarak hareket edemez.

Geri Arama Yöntemleri

Bunlar, API sağlayıcısı tarafından sağlanan ve uygulama programcısı tarafından tanımlanan ve uygulama geliştiricisi tarafından çağrılan yöntemlerdir. Burada, geri çağırma yöntemleri bir olay yöntemini temsil eder. Bir olaya yanıt olarak java jre, geri arama yöntemini ateşleyecektir. Bu tür tüm geri arama yöntemleri dinleyici arabirimlerinde sağlanır.

Bir bileşen bir dinleyicinin kendi olaylarını dinlemesini istiyorsa, kaynağın kendisini dinleyiciye kaydetmesi gerekir.

Olay İşleme Örneği

Seçtiğiniz herhangi bir düzenleyiciyi kullanarak aşağıdaki java programını oluşturun D:/ > AWT > com > tutorialspoint > gui >

AwtControlDemo.java
package 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.");
         }  	
      }		
   }
}

Programı komut istemini kullanarak derleyin. GitD:/ > AWT ve aşağıdaki komutu yazın.

D:\AWT>javac com\tutorialspoint\gui\AwtControlDemo.java

Hata gelmezse bu derlemenin başarılı olduğu anlamına gelir. Aşağıdaki komutu kullanarak programı çalıştırın.

D:\AWT>java com.tutorialspoint.gui.AwtControlDemo

Aşağıdaki çıktıyı doğrulayın