20 Mayıs 2013 Pazartesi

Java Gui--11(JMenuBar)




     JFrame ile oluşturduğumuz pencerelere menü çubuğu eklemek için swing kütüphanesinden JMenuBar ' i kullanıyoruz. Daha sonra bu menü çubuğuna sekme eklemek için JMenu oluşturuyoruz. Bu JMenu lere ekleyeceğimiz ögeler için ise JMenuItem ögeleri oluşturuyoruz. Biraz karışık oldu ama aşağıdaki örneği incelersek çok kolay olduğu anlaşılacaktır!

     Örneğin bir menü çubuğumuz var ve bu menü çubuğunda “Dosyalar” ve “Renkler” isimli iki sekmemiz olsun. “Renkler ” sekmesinde ise çeşitli renkler bulunsun. Bunun için kodlama aşağıdaki gibi olmalıdır:

 JMenuBar menu = new JMenuBar( );

 JMenu file = new JMenu("Dosyalar");

 JMenu color = new JMenu("Renkler");

 JMenuItem r1 = new JMenuItem("Siyah");

 JMenuItem r2 = new JMenuItem("Sarı");

 JMenuItem r3 = new JMenuItem("Mavi");

 JMenuItem r4 = new JMenuItem("Kırmızı");

Örnek

     Şimdi de yapacağımız üstteki örneğin aynisi ama bu sefer de bu JMenuItem ögelerine ActionListener ekleyelim ve pencere arka plan rengini seçtiğimiz renkler olmasını sağlayalım. Bunun için unutmamamız gereken önemli bir nokta vardır bu da “getContentPane( )” metodunu kullanmaktır ve eğer kullanmazsak arkaplan rengi değişmeyecektir.

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class JMenubarDemo extends JFrame implements ActionListener{
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("Dosyalar");
    JMenu color = new JMenu("Renkler");
    JMenuItem exit = new JMenuItem("Cıkıs");
    JMenuItem r1 = new JMenuItem("Cyan");
    JMenuItem r2 = new JMenuItem("Sarı");
    JMenuItem r3 = new JMenuItem("Mavi");
    JMenuItem r4 = new JMenuItem("Kırmızı");
    public JMenubarDemo(){
        super("JMenuBarDemo");
        setSize(200, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        setLayout(new FlowLayout());
        add(menu);
        menu.add(file);
        menu.add(color);
        exit.addActionListener(this);
        r1.addActionListener(this);
        r2.addActionListener(this);
        r3.addActionListener(this);
        r4.addActionListener(this);
        color.add(r1);
        color.add(r2);
        color.add(r3);
        color.add(r4);
        file.add(exit);
       
    }
    public void actionPerformed(ActionEvent event){
        Object kod = event.getSource();
        Container con = getContentPane();
        if(kod == r1){
            con.setBackground(Color.cyan);
        }
        if(kod == r2){
            con.setBackground(Color.yellow);
        }
        if(kod == r3){
            con.setBackground(Color.blue);
        }
        if(kod == r4){
            con.setBackground(Color.red);
        }
        if(kod == exit){
            System.exit(0);
        }
    }
    public static void main(String[] args) {
        JMenubarDemo demo = new JMenubarDemo();
    }
}

Ekran Görüntüleri



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ü





5 Mayıs 2013 Pazar

Java Gui--9(JPanel)



     
    JPanel , penceremizi daha aktif olarak kullanabilmemizi sağlar .Ekleyeceğimiz ögeleri JPanel' e ekleyerek daha düzenli bir görüntü elde edebiliriz .Örneğin her bilgisayarda bulunan hesap makinelerini düşünebiliriz .Burada iki panel pencereye ortada ve üstte olmak üzere yerleştirilmiştir .Üst panelde JTextField ortadaki panelde ise numaralar ve operatörler bulunmaktadır.


         Biz de buna benzer basit bir hesap makinesi penceresi oluşturabiliriz.

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class JPanelDemo extends JFrame{
    JTextField text = new JTextField(15);
    JPanel ust = new JPanel( );
    JPanel alt = new JPanel( );
    JButton[ ] buttons = new JButton[15];
    String[ ] say =
    {"1","2","3","4","5","6","7","8","9","0","-","+","/","*","="};
    public JPanelDemo( ){
        super("JPanel");
        setSize(200, 200);
        setVisible(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(ust, BorderLayout.NORTH);
        add(alt,BorderLayout.CENTER);
        ust.setLayout(new FlowLayout( ));
        alt.setLayout(new FlowLayout( ));
        ust.add(text);
        for(int i = 0;i < buttons.length;i++){
            buttons[i] = new JButton(say[i]);
            alt.add(buttons[i]);
        }
    }
    public static void main(String[ ] args) {
        JPanelDemo demo = new JpanelDemo( );
    }
}
  

Ekran Görüntüsü




Örnek 2

     Bu örnek te 64 kareden oluşan satranç tahtası gibi bir görüntü elde edeceğiz.Buırda JPanellerden her birinin renginin siyah ve beyaz olmasını sağladık.Böylece ekran görüntüsü aşağıdaki gibi oldu:



import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Deneme extends JFrame{
    private int max = 64;
    private Jpanel[ ] panels = new JPanel[max];
    private Color renk1 = Color.BLACK;
    private Color renk2 = Color.WHITE;
    private Color temp;
   
    public Deneme( ){
        super("Deneme");
        setLayout(new GridLayout(8, 8));
        for(int i = 0;i < max;i++){
            panels[i] = new Jpanel( );
            if((i % 8) == 0){
                temp = renk1;
                renk1 = renk2;
                renk2 = temp;
            }
            if(i % 2 == 0){
                panels[i].setBackground(renk1);
            }else{
                panels[i].setBackground(renk2);
            }
            add(panels[i]);
        }
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(300, 300);
    }
   
    public static void main(String[ ] args) {
        Deneme deneme = new Deneme( );
    }
}



     Bu uygulamada 8 ‘e 8 “gridLayout” oluşturduk ve her alt satıra geçerken renklerin yerini değiştirdik.Bunu renk değiştirme işini gri ile işaretlenmiş yerde yaptık.Buradaki 8 değerini değiştirerek farklı şekiller elde edebiliriz.Ben  7 ve 9 olarak değiştirdim , ekran görüntüleri aşağıdakşi gibi oldu:





     NOT// JPanel'e eklediğiniz componentlerin bir butona basıldığında veya daha farklı bir işlem yaptığınızda tekrar kaldırmak isterseniz sırası ile aşağıdaki fonksiyonları kullanmalısınız:

  1. remove(Component ismi buraya );
  2. revalidate( );
  3. repaint( );
 1. nin yerine "removeAll( )" fonksiyonuda kullanılabilir.