Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

9 Aralık 2009 Çarşamba

Swing ile programlama 3 - ActionListener

GUI de öncelikle bir pencere(window) ye ihtiyacımız vardı. Ki bu window diğer bileşenlerimizi içersin. İşte javada barındırıcı penceremiz (container) JFrame den hazırlanmıştı. Şimdi de bu ana penceredeki bileşenlerin üreteceği olayları(event) nasıl yakalarız ve nasıl sonuç üretiriz onu yazalım.

Bunun içinde bir yerlerden ActionListener kullanmamız gerektiğini duymuş olalım.

Önce ActionListener nedir?
  • Sınıf mıdır? Arayüz müdür? Soyut mudur?
  • Ne yapar bizim için?



public interface ActionListener extends EventListener {

/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e);

}


Arayüzmüş. Demek ki bundan sınıflar türetebiliriz. Bu güzel. Peki nedir ActionListener?

Swing’de, görsel bileşenlerden (ui components) tetiklenen olaylara (action) dinleyici (listener) eklemek için bu komut kullanılır. Örneğin bir butona eklenen dinleyiciyle, butona tıklama olayından sonra butonun işini yapmasını sağlayabilirsiniz. Ufak bir de not, bir görsel bileşene birden fazla dinleyici eklenebilir, böylece bir olaydan tetiklenen sayısız iş yaptırılabilir. Referans:Kayıp Şehir


Bir bileşen üzerinde gerçekleşen hareket durumunu (action event) almak ve işlemek için oluşturacağımız objenin sınıfı bu arayüzü kullanır. Şimdi bizim bir nesneye ihtiyacımız var. Bu nesneyi frame üzerindeki bileşenin birine kaydedeceğiz. Yani, diyeceğizki nesnemize, bu bileşeni sen marke edeceksin. Nesnemiz, ilgili bileşenin karıştığı bir hareket durumunu (action event) yakalayacak ve ait olduğu sınıftan aldığı metodu tetikleyecektir.


package javaapplication;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Main {

public static void main(String[] args) {
JFrame frame = new JFrame("Başlıkta görünsün");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 450);
frame.setVisible(true);

int iYatayBosluk = 5;
int iDikeyBosluk = 15;
LayoutManager layoutMgr = new FlowLayout(FlowLayout.CENTER, iYatayBosluk, iDikeyBosluk);

// javax.swing paketindeki rootpanecontainer interface'inin bir metodu.
// Kısaca top-level container'ların contentpane'ine erişmek için kullanılır.
Container enUsttekiKap = frame.getContentPane();

enUsttekiKap.setLayout(layoutMgr);

// Frame üzerine koymak istediğimiz JLabel bileşenini oluşturup
JLabel lbl = new JLabel();
// Metnini değiştiriyoruz
lbl.setText("İsim: ");
// JLabel sınıfından oluşturduğumuz lbl nesnesini ekliyoruz.
enUsttekiKap.add(lbl);


// 5 kolonluk bir genişlikte metin kutusu oluştur.
final JTextField txt = new JTextField(5);
enUsttekiKap.add(txt);

txt.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
txt.setBackground(Color.red);
}
});

// Bir de düğme ekleyelim.
final JButton btn = new JButton("GÖNDER");
enUsttekiKap.add(btn);

ActionListener alBtn = new ActionListener() {

public void actionPerformed(ActionEvent e) {
btn.setText("Düğmeye basıldı");
}
};

btn.addActionListener(alBtn);
}
}