10 Mayıs 2013 Cuma

Java Gui--10(Events & ActionListener & ActionEvent)

Events




         Events yani Türkçesi ile olaylar , java gui ile yazdığımız programda olaylara tepki üretmemizi sağlar. Örneğin bir butona basılması bir olaydır ve biz bu olayı java da dinleyip basılma olayı neticesinde programın ne yapması gerektiğini belirleyebiliriz.
         Event lar componentler için çeşitlilik gösterir. Yani buton için “ActionEvent”, mouse için “MouseEvent” , klavyede basılan tuşlar için (key) “KeyEvent” ,... gibi örneklendirilebilir. Bu event ları dinleyip tepki oluşturabileceğimizi söylemiştik. Bu iş için “listener” dediğimiz kavramları kullanıyoruz. Bunlara örnek , “ActionListener”, “KeyListener” , “MouseListener”,... gibi çoğaltılabilir.

         <ad>Event.......<ad>Listener      genelde  mantık bu şekildedir.

Buton Events


         Butondaki olayları ActionEvent sınıfı ile ,dinleme isini ise ActionListener ara yüzü(interface) ile dinliyoruz. Sonuç olarak istediğimizi yaptırmak için ise “actionPerformed( )” metodunu kullanıyoruz. Butona basıldıktan sonra ne olmasını istiyorsak bu metodun içine yazıyoruz.

/////////////////////////////////////////////////////////////////////////
public void actionPerformed(ActionEvent event){
        //Kodlar buraya
    }
////////////////////////////////////////////////////////////////////////

Örnek


         İlk örneğimizde bir buton ve textfield olsun. Butona basıldığında textfield da butonda yazan yazı textfield da  yazsın.

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class ButonDemo extends JFrame implements ActionListener{

    JButton buton = new JButton("Basma!");
    JTextField text = new JTextField(10);
    public ButonDemo( ){
        super("ButonDemo");
        setSize(200, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(new FlowLayout( ));
        add(text);
        add(buton);
        buton.addActionListener(this);
    }
    public void actionPerformed(ActionEvent event){
        text.setText(buton.getText( ));
    }
    public static void main(String[ ] args) {
        ButonDemo demo = new ButonDemo( );
    }
}

         Burada dikkat etmemiz gereken yerler

1.    “ActionListener” i implement etmek
2.    Butona “ActionListener” eklemek
3.    “actionPerformed( )” metodunu eklemek(metodun yazılışına dikkat)
        
bunlardan birisini unutursak program çalışmayacaktır. 

Ekran Görüntüsü




Örnek 2

         2 tane butonumuz olsun bu butonlar açılışta ortada sonra soldakine basınca sola sağdakine basınca sağa gitsin.

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Deneme extends JFrame implements ActionListener{
    JButton buton1 = new JButton("sol");
    JButton buton2 = new JButton("sag");
    int x = 10;
    int y = 10;
    public Deneme( ){
        super("Deneme");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        setSize(500, 100);
        setLayout(new FlowLayout( ));
        add(buton1);add(buton2);
        buton1.addActionListener(this);
        buton2.addActionListener(this);
    }
    public void actionPerformed(ActionEvent event){
        String a = event.getActionCommand( );
        if(a.equals("sol")){
            buton1.setLocation(x,y);
            buton2.setLocation(x+50,y);
        }else{
            buton1.setLocation(x+350, y);
            buton2.setLocation(x+400, y);
        }
    }
    public static void main(String[ ] args) {
        Deneme deneme = new Deneme( );
    }
}

         Burada x ve y olarak koordinatları tutan değişkenler ile tuşlara basıldığında yerlerinin değişmesini sağladık(setLocation(int a, int b) metodu ile)

Ekran Görüntüsü





2 yorum:

  1. GUI için çok güzel bir kaynak oldu benim için çok teşekkürler
    Ellerinize sağlık

    YanıtlaSil