SWING - Olay Yönetimi
Bu bölümde, Etkinlikler ve türleri hakkında bilgi edinecek ve ayrıca bir olayı nasıl ele alacağınızı öğreneceksiniz. Daha iyi anlaşılması için örnek bölümün sonunda verilmiştir.
Etkinlik nedir?
Bir nesnenin durumundaki değişiklik olarak bilinir Eventyani olay, kaynağın durumundaki değişikliği tanımlar. Olaylar, kullanıcının grafik kullanıcı arabirimi bileşenleriyle etkileşiminin bir sonucu olarak oluşturulur. Örneğin, bir düğmeye tıklamak, fareyi hareket ettirmek, klavyeden bir karakter girmek, listeden bir öğe seçmek ve sayfayı kaydırmak, bir olayın meydana gelmesine neden olan aktivitelerdir.
Olay Türleri
Olaylar genel olarak iki kategoriye ayrılabilir -
Foreground Events- Bu olaylar, kullanıcının doğrudan etkileşimini gerektirir. 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- Bu olaylar, son kullanıcının etkileşimini gerektirir. İşletim sistemi kesintileri, donanım veya yazılım arızaları, zamanlayıcının sona ermesi ve işlemin tamamlanması, arka plan olaylarının bazı örnekleridir.
Olay İşleme nedir?
Olay İşleme, olayı kontrol eden ve bir olay meydana geldiğinde ne olması gerektiğine karar veren mekanizmadır. Bu mekanizma, bir olay gerçekleştiğinde yürütülen ve olay işleyicisi olarak bilinen bir 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.
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 bize kaynak nesne için sınıflar sağlar.
Listener- Aynı zamanda olay işleyici 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ı olması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 etkili bir yoludur çünkü olay bildirimleri yalnızca onları almak isteyen dinleyicilere gönderilir.
Olay İşlemeye Dahil Olan Adımlar
Step 1 - Kullanıcı düğmeyi tıklar ve olay oluşturulur.
Step 2 - İlgili olay sınıfının nesnesi otomatik olarak oluşturulur ve kaynak ve olay hakkındaki bilgiler aynı nesne içinde doldurulur.
Step 3 - Olay nesnesi, kayıtlı dinleyici sınıfının yöntemine iletilir.
Step 4 - Yöntem çalıştırılır ve geri döner.
Dinleyici Hakkında Hatırlanması Gereken Noktalar
Bir dinleyici sınıfı tasarlamak için, bazı dinleyici arayüzleri geliştirmelisiniz. Bu Dinleyici arabirimleri, dinleyici sınıfı tarafından uygulanması gereken bazı genel soyut geri çağrı yöntemlerini tahmin eder.
Önceden tanımlanmış arabirimlerin hiç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, kaynak kendisini dinleyiciye kaydetmelidir.
Olay İşleme Örneği
Aşağıdaki Java programını istediğiniz herhangi bir düzenleyiciyi kullanarak oluşturun D:/ > SWING > com > tutorialspoint > gui >
SwingControlDemo.java
package com.tutorialspoint.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingControlDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public SwingControlDemo(){
prepareGUI();
}
public static void main(String[] args){
SwingControlDemo swingControlDemo = new SwingControlDemo();
swingControlDemo.showEventDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("Java SWING Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
headerLabel = new JLabel("",JLabel.CENTER );
statusLabel = new JLabel("",JLabel.CENTER);
statusLabel.setSize(350,100);
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
controlPanel = new JPanel();
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");
JButton okButton = new JButton("OK");
JButton submitButton = new JButton("Submit");
JButton cancelButton = new JButton("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:/ > SWING ve aşağıdaki komutu yazın.
D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java
Hata oluşmazsa, 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.SwingControlDemo
Aşağıdaki çıktıyı doğrulayın.