Şimdi Ara

#JAVA GUI PROGRAMLAMA DERSLERİ#

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
30
Cevap
17
Favori
61.230
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
1 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • #JAVA GUI PROGRAMLAMA DERSLERİ#




    Merhaba.
    Java programlama dili üzerinden bir program için grafiksel kullanıcı arayüzü nasıl oluşturulur , swing kütüphanesi ile nasıl çalışılır hakkında kendi notlarımdan ve kısa çalışmalarımdan derlediğim dersler hazırlamaya çalışacağım.Konular belirli başlıklar altında ilerleyecek ve ilk mesaj üzerinden güncellenecektir.Dersler grafiksel kullanıcı arayüzü ögeleri hakkında bilgi sağlayacaktır.Bunun dışında programlama temelleri veya Java diline dair gramerik konuları içermeyecektir.Bilgi paylaşımı amacıyla boş vakitlerimi buraya ayırmaya çalışacağım.Tecrübe sahibi arkadaşların da katkısı ile zengin bir döküman ortaya çıkarabileceğimizi düşünüyorum.İyi çalışmalar.

    [27.10.2012]




    1. DERS : GUI ve JAVA
    2. DERS : SWING MİMARİSİ
    3. DERS : PENCERE OLUŞTURMA
    4. DERS : PENCEREYE PANEL EKLEME
    5. DERS : HAZIR GİRİŞ-ÇIKIŞ KUTULARI
    6. DERS : PENCEREYE BUTON EKLEME
    7. DERS : BUTON GRUPLARI
    8. DERS : OLAY GÜDÜMLÜ PROGRAMLAMA
    9. DERS : MENULER






    1. DERS : GUI ve JAVA [27.10.2012]

    GUI nedir ?
    GUI (Graphical User Interface) , yani grafiksel kullanıcı arayüzü , program ile kullanıcı arasında görsel,sezgisel,kullanıcı dostu (user friendly) ,kolay ve pratik bir ilişki kuran , kullanıcıyı bilgisayar hakkında teknik bilgi sahibi olma zorunluluğundan kurtaran, bilgi giriş/çıkışının sağlandığı arayüze denir.Her işletim sistemi kullanıcısına en iyisini sunabilmek için hem görsel açıdan zevk sahibi , hem de kullanıcı dostu bir arayüz sunmak ister.Bir programcının , ürettiği programın iyi bir arayüze sahip olabilmesi için GUI programlamaya hakim olması gerekmektedir.Programı yazdığınız dil işletim sisteminin çekirdeğinde saklı GUI sınıflarını-API'leri kullanabilir veya daha profesyonel çalışarak kendi çizim prosedürlerinizi kullanabilir,kendi arayüz sisteminizi oluşturabilirsiniz.

    Bir GUI örneği:
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Java'da GUI
    Java dili GUI için AWT (Abstract Window Toolkit) ve SWING kütüphanelerini kullanır.Java'da arayüz ihtiyacı için oluşturulmuş ilk kütüphane AWT 'dir.Fakat AWT'nin bazı yetersizliklerinden dolayı yeni bir bileşen setine ihtiyaç duyulmuştur.Ortaya çıkan bu yeni bileşen seti SWING 'tir. AWT'nin geliştirilmesinin durdurulmasının ana sebebi Java 'nın temel politikası olan "Bir kere yaz , her yerde çalıştır" mantığına uygun olmaması idi.Java dilinde yazılan uygulamalar derlenmeden önce bir interpreter ile .class uzantılı dosyalara çevrilir.Bu dosya bir arakoddur ve her sistemde aynı sonucu üretecek biçimde çalışması amaçlanmıştır.Yani aynı kodu windows işletim sisteminde de linux işletim sisteminde de çalıştırabilirsiniz.Fakat AWT ile yazılan programlar farklı sistemlerde tutarsız sonuçlara sebep oluyor hatta bazı durumlarda çalışma hatalarına kadar uzanıyordu.Swing kütüphanesi hem taşınabilir uygulamalar yazmak için hemde GUI 'de gerekli tüm araçları sağlaması için gerekli tüm bileşenlere sahip devasa boyutta bir pakettir.

    Aslında swing kütüphanesi sıfırdan oluşturulmuş değildir.AWT üzerine kurulmuş bir kütüphanedir ve awt'ye ait bir çok sınıfı halen kullanmaktadır.AWT'nin eksik yönlerini kapatır ve artılarını da kendine katar.Örneğin olay yakalama mekanizması için java'da halen awt.event paketleri kullanılır.Java 'nın 1.2 versiyonuyla birlikte kullanılmaya başlanana swing'te her widget , platforma bağımlı olarak değil , swing'e bağlı olarak çalışır.

    AWT işletim sistemine ait API leri kullanmasına karşın swing tamamen java tarafından render edilen arayüzü kullanır.Bu nedenle her sistemde aynı sonucu görebilirsiniz.Tabiki bu durum uygulamanın nasıl görüneceğine karar veremeyeceğiniz manasına gelmiyor.Look and Feel konusuna gelindiğinde bu konuya daha ayrıntılı olarak değinilecektir.




    2. DERS : SWING MİMARİSİ [27.10.2012]

    Java , program geliştirmede MVC Yapısını (Model-View-Controller) kullanır.Yani programın hesap-kitap-işlem kısmına dair model kısmı ve GUI'ye dair view kısmı birbirinden ayrılmıştır.Bu yaklaşım program geliştirilmesinde programcılara büyük kolaylık sağlamaktadır.Controller tarafında ise bu iki birim birbiri ile entegre olarak çalıştırılır.Fakat javada model ile controller arasındaki sınır kesin olarak birbirinden ayrılmaz.

    Swing mimarisi iki temel üzerine kuruludur :
    1. Bileşenler ( Components )
    2. Konteynerlar ( Containers )

    Bileşen seti gerekli tüm görsel araçları içerir.Yazı,resim içerikleri için labellar , yazı kutuları , kaydırma çubukları , menüler , pencere bileşenleri vs. tüm bileşenler component sınıfından türemiştir.
    Konteyner ise bileşenlerin üzerinde tutulacağı veri modelleridir.Tüm bileşenler bir konteyner üzerinde tutulmak zorundadır.Bu nedenle her GUI uygulaması en az bir konteynera sahip olmak zorundadır.

     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Java'da konteynarlar içiçe tanımlanabilir.En dıştaki konteyner tüm bileşen ve iç konteynerları tutan top-level konteynerlardır.Bunun altında bulunanlar ise kapsayıcı konteyner olarak anılır.
    Tüm bileşenlere ait sınıf diyagramı aşağıdadır.

     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Daha ayrıntılı bir diyagram :





    3. DERS : PENCERE OLUŞTURMA : JFrame [27.10.2012]

    Java swing kütüphanesinde bir pencere oluşturmak için kullanacağımız ana sınıf JFrame'dir.
    Genel tasarım tarzı bir frame - üzerine istenilen sayıda panel - ve paneller üzerine gerekli bileşenler eklenerek yapılır.

    Öncelikle kısa bir kod veriyorum .Altında satır satır açıklaması olacak.
     

    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class FrameDemo extends JFrame
    {

    public FrameDemo()
    {
    this.setTitle("FrameDemo Test");
    this.setSize(640 , 480);
    this.setLayout(null);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



    public static void main(String[] args)
    {
    new FrameDemo();
    }

    }


    Oluşturulan sınıf JFrame sınıfından türetilmiş olduğu için bir frame 'e ait tüm özellik ve metodları miras alır.Böylece kurucu metod çağrıldığında yeni bir penceremiz olur.

    setTitle(String) metodu pencere başlığını ,
    setSize(int,int) metodu pencere boyutunu ,
    setLayout(Layout) metodu pencere yerleşim düzenini ayarlar.
    (layout konusuna ayrıntılı olarak değinilecektir)

    setVisible(boolean) true parametresi ile pencereyi görünür kılar.
    setDefaultCloseOperation() metodu ise varsayılan pencere kapanış davranışını ayarlar.

    JFrame sınıfı daha birçok metoda sahiptir.Bu metodlar kurucu tarafından varsayılan parametrelerle çağırılır.Örneğin setVisible() metodunun varsayılanı false 'dır.Yani biz true olarak değiştirmezsek sınıf üretilse dahi pencere görünmez.Başka bir örnek ise setLocation() metodu olarak verebilirim.Biz bu metodu çağırmadığımız halde penceremizin varsayılan başlangıç koordinatları (0,0) dır.

    Şimdi yukarıdaki örneğin daha ayrıntılı bir analizini yapalım.FrameDemo sınıfımız JFrame'den , JFrame'in ise Container sınıfından türediğini biliyoruz.Bu nedenle ayrıyeten bir Container nesnesi üretme ihtiyacı duymadık.Pencereye bir bileşen eklemek için kod aşağıdaki biçimde de tasarlanabilirdi.

     

    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class FrameDemo extends JFrame
    {
    JButton buton1;

    public FrameDemo()
    {
    this.setTitle("FrameDemo Test");
    this.setSize(640 , 480);
    this.setLayout(null);

    buton1 = new JButton("Buton 1");
    this.add(buton1); // veya this.getContentPane().add(buton1);
    buton1.setBounds(10,20,100,40);


    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }


    public static void main(String[] args)
    {
    new FrameDemo();
    }

    }


    Yukarıdaki kod pencereye bir buton nasıl eklenir sorusunun da cevabı. Fakat değinmek istediğim asıl nokta butonun eklendiği konteyner.

    this.add() metodu pencereye bir bileşen eklemek için kullanılır.Object tipinde bir parametre alır.Daha ayrıntılı dökümantasyon için docs.oracle sitesini ziyaret edebilirisiniz.
    Bu metod ile aslında pencerenin top-level konteyner'ına bir bileşen eklenir.Bu konteyner'ın referansına erişmek için getDefaultContentPane() metodu kullanılabilir.

    Sınıfı JFrame sınıfından extend etmek zorunda değilsiniz.JFrame sınıfından bir nesne üreterek de pencerenizi oluşturabilirsiniz.

    Örnek :
     

    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class FrameDemo
    {
    JFrame pencere;
    JButton buton1;

    public FrameDemo()
    {
    pencere = new JFrame("FrameDemo Test");

    pencere.setSize(640 , 480);
    pencere.setLayout(null);

    buton1 = new JButton("Buton 1");
    pencere.add(buton1); // veya pencere.getContentPane().add(buton1);
    buton1.setBounds(10,20,100,40);


    pencere.setVisible(true);
    pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }


    public static void main(String[] args)
    {
    new FrameDemo();
    }

    }


    Artık this operatörünü kullanmadığımıza dikkat edin.

    Butonlar ayrı bir konu olarak incelenecektir.Ayrıca setLayout() metoduna null parametresini verdik.Yani herhangi bir yerleşim düzeni kullanmak istemediğimizi,bileşenlerin konumlandırmasını kendimizin yapacağını bildirdik.Layout konusuna daha sonra değinilecektir.






    4. DERS : PENCEREYE PANEL EKLEME : JPanel [28.10.2012]

    Paneller pencere üzerinde kendine ait, bağımsız konteynera sahip , ayrılmış alanlardır.Varsayılan görünümde pencere içinde panelleri ayırt edemezsiniz.Fakat istenilirse ayrı bir arkaplan rengi kullanılabilir veya bir border ile çevrelenebilir. Genellikle bir pencerede farklı amaçlarla kullanılacak alanları birbirinden ayırmak ve herbirine farklı layout düzenleri kullanılmak istenildiğinde kullanılır.

    Java'da panel oluşturmak için JPanel sınıfı kullanılır.

    Örnek :
     
    import java.awt.Color;
    import java.awt.Container;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.Border;
    import javax.swing.border.TitledBorder;

    public class LayoutDemo extends JFrame
    {

    public LayoutDemo()
    {
    this.setTitle("LayoutDemo Test");
    this.setSize(1280 , 960);
    this.setLayout(null);
    BilesenleriEkle(this.getContentPane());
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void BilesenleriEkle(Container pencere)
    {
    JPanel solPanel = new JPanel();
    JPanel sagPanel = new JPanel();
    JPanel ustPanel = new JPanel();
    JPanel altPanel = new JPanel();
    JPanel ortaPanel = new JPanel();

    pencere.add(solPanel);
    solPanel.setBackground(Color.BLUE);
    solPanel.setBounds(20, 20, 180, 820);

    pencere.add(ustPanel);
    ustPanel.setBackground(Color.RED);
    ustPanel.setBounds(210, 20, 800, 150);

    pencere.add(sagPanel);
    sagPanel.setBackground(Color.GREEN);
    sagPanel.setBounds(1020, 20, 180, 820);

    pencere.add(ortaPanel);
    ortaPanel.setBackground(Color.YELLOW);
    ortaPanel.setBorder(new TitledBorder("Orta Panel"));
    ortaPanel.setLayout(null);
    ortaPanel.setBounds(210, 180, 800, 500);

    pencere.add(altPanel);
    altPanel.setBackground(Color.CYAN);
    altPanel.setBounds(210, 690, 800, 150);

    JButton buton1 = new JButton("Buton1");
    ortaPanel.add(buton1);
    buton1.setBounds(20 ,30 ,150 ,40);
    }

    public static void main(String[] args)
    {
    new LayoutDemo();
    }

    }


    Verdiğim örnekte pencere üzerine 5 adet panel ekledik.Bu panelleri pencereyi alt-üst-sağ-sol ve orta şeklinde alanlara ayırmak için kullandık.
    setBackground() metodu panelin arkaplan rengini ayarlamada kullanılır.

    Son olarak eklediğimiz bir buton var ve orta panele bir border eklediğimize dikkat edin.
    Dikkatinizi çekmek istediğim bir diğer nokta eklenen buton için verdiğimiz koordinat değerleri.Bu koordinatlar pencerenin başlangıç noktasına göre değil eklemenin yapıldığı ekran bileşeninin başlangıç noktasına göre verilir.

    Ekran görüntüsü :
     #JAVA GUI PROGRAMLAMA DERSLERİ#






    5. DERS : HAZIR GİRİŞ-ÇIKIŞ KUTULARI : JOptionPane [28.10.2012]

    Program yazarken çoğu yerde basit girdi işlemlerinde , bir mesaj görüntülemek istediğimizde veya bir uyarı vermek istediğimizde bir mesaj kutusuna ihtiyaç duyarız.Bu işi sıfırdan bir form tasarlayarak kendimiz de yapabiliriz.Fakat java'da JOptionPane sınıfı bütün bu basit işlemler için gerekli işlevlere sahip nesneleri içerir.

    Örneğin bir sudoku uygulaması hazırladığınızı farzedin.Sudoku tablosundaki kutulardan birine tıklayarak sayı girişi yapmak istiyorsunuz.Sudoku bulmacası kurallarına göre bu sayı 1-9 arasında bulunmalı ve satır/sütun ve 9'lu kümede aynı sayıdan bulunmamalı.Bu kontrolü yaptıktan sonra giriş kural ihlali içeriyorsa ekrana "Sayı 1-9 arasında bulunmalıdır!" gibi bir uyarı vermesi gerekir.

    Örnek :
     

    //SAYI GİRİŞİ
    String sayi = JOptionPane.showInputDialog("Sayı giriniz : ");

    if(/* Giriş hatalı ise */)
    JOptionPane.showMessageDialog(null, "Hatalı giriş ! Sayı 1-9 arasında olmalıdır.", "Hatalı giriş", JOptionPane.ERROR_MESSAGE);



    Örnekte ilk metod JOptionPane sınıfının showInputDialog() metodudur.Klavyeden bir String okumak için kullanılır.String tipinde bir argüman alır.Bu argüman ekranda görüntülenecek mesajdır.Ekran görüntüsü:
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    İkinci metod showMessageDialog() metodu.
    Bu metod ekrana bir mesaj yada bir uyarı görüntülemede kullanılır.

    Her iki metodunda farklı parametrelere sahip birden çok overload edilmiş çeşidi vardır.Örneğin showMessageDialog() metodunun 1. parametresi Component tipindedir ve parentComponent olarak geçer.Yani mesaj kutusunun ait olduğu formu işaret eder.Bu parametreye göre mesaj kutusu konumlandırılır ve ait olduğu formu etkiler.Eğer null olarak verilmiş ise çağırıldığı form üzerinden işlenir.
    2. parametre mesaj metnidir.
    3. parametre kutu başlığıdır.
    4. parametre ise mesaj tipidir.Bu parametreye göre mesaj kutusuna ilgili ikon eklenir.

    4.parametre için :
    question
     #JAVA GUI PROGRAMLAMA DERSLERİ#
     #JAVA GUI PROGRAMLAMA DERSLERİ#

    information
     #JAVA GUI PROGRAMLAMA DERSLERİ#
     #JAVA GUI PROGRAMLAMA DERSLERİ#

    warning
     #JAVA GUI PROGRAMLAMA DERSLERİ#
     #JAVA GUI PROGRAMLAMA DERSLERİ#

    error
     #JAVA GUI PROGRAMLAMA DERSLERİ#
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Daha ayrıntılı bilgi için :
    docs.oracle.com
    How to Make Dialogs (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
    http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html






    6. DERS : PENCEREYE BUTON EKLEME : JButton [28.10.2012]

    GUI programlamanın en çok kullanılan bileşenlerinden biri de butonlardır. Kullanımı oldukça basittir.Fakat form üzerine eklediğimiz butonu kontrol edebilmemiz için GUI programlamanın en temel konularından biri olan olay güdümlü programlama hakkında bilgi sahibi olmanız gerekmektedir.Bu nedenle butonun pencereye eklenmesi ,görünümü vs. konuları verdikten sonra ayrı bir başlık olarak olay mekanizmasını daha ileride yazmayı uygun gördüm.Çünkü her bileşeni ilgilendiren bir konu.

    Java'da 4 farklı buton türü bulunur.

    1.JButton : Basit buton
    2.JRadioButton : Birden çok seçenek içerisinden birini seçmek gerektiğinde kullanılan buton grubu.
    3.JCheckBox : Birden çok seçenek içerisinden birkaçını seçmek (işaretlemek) gerektiğinde kullanılan buton grubu.
    4.ToggleButton : Açık veya kapalı durumda olan, anahtar işlevi gören bir buton türü.Boolean (true/false) tipinde bir değer saklar.

    3'ünü birden gösteren bir örnek : (e-bergi'den alınmıştır)
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Toggle buton örneği:

     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Bir örnek kod:
     

    import javax.swing.JButton;

    public class ButtonDemo extends JFrame
    {
    JButton b1;

    public ButtonDemo()
    {
    ImageIcon buttonIcon = createImageIcon("images/icon.gif");

    b1 = new JButton("Buton 1", buttonIcon);
    b1.setVerticalTextPosition(AbstractButton.CENTER);
    b1.setHorizontalTextPosition(AbstractButton.LEADING);
    b1.setMnemonic(KeyEvent.VK_B);
    b1.setToolTipText("İmleci butonun üzerine getirdiğinde bu yazı çıkar.");

    b1.setEnabled(false);

    b1.setBounds(10,10,120,40);
    this.add(b1);
    }

    protected static ImageIcon createImageIcon(String path)
    {
    java.net.URL imgURL = ButtonDemo.class.getResource(path);
    if (imgURL != null)
    {
    return new ImageIcon(imgURL);
    }
    else
    {
    System.err.println("Dosya bulunamadı! : " + path);
    return null;
    }
    }
    }


    Verdiğim örnekte resim ve metni bir arada bulunduran bir buton oluşturuyoruz.İkonu oluşturduğumuz createImageIcon() metoduyla aldık.Buton üzerinde yazının konumunu ayarladık ve extra bir kaç özellik koyduk.
    Birincisi setMnemonic() metodu.Bu metod klavyedeki harflere buton için kısayol atanmasını sağlıyor.Buna Dosya Düzen Görünüm vs. menülerde de rastlamışsınızdır.İlgili karakter altı çizili olarak vurgu yapılır.
    İkincisi de setToolTipText() metodu. ToolTipText 'ler fare imlecini bileşen üzerine getirdiğimizde bir balon içerisinde küçük bir açıklama metni görüntülenmesini sağlar.

    Diğer buton tiplerine dair örnekler verilecek.Butonları kullanabilmek için gerekli olan event konusuna diğer bileşenler açıklandıktan sonra geleceğim.




    7. DERS : BUTON GRUPLARI : JRadioButton , JCheckBox [06.11.2012]

    Merhaba;
    Bu derste bir diğer buton türü olan radioButton ve CheckBox bileşenlerine değineceğiz.Bu butonlardan radioButton birden çok seçenek içerisinde birini seçmek,işaretlemek için ; checkBox ise yine birden fazla seçenek içerisinden bir veya birkaçını işaretlemek için kullanılır.İşlemler buton grubunun tamamını ilgilendirdiğinden aralarındaki ilişkiyi kurmak için bir ButtonGroup nesnesi ile beraber kullanılırlar.

    Örnek;
     
    import java.awt.FlowLayout;

    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JRadioButton;
    import javax.swing.JCheckBox;
    import javax.swing.ButtonGroup;
    import javax.swing.JTextField;

    public class JButonlar extends JFrame
    {
    private JLabel isim;
    private JTextField isimKutusu;
    private JButton tamamButon;
    private JRadioButton erkek;
    private JRadioButton bayan;
    private JCheckBox dans;
    private JCheckBox gitar;
    private JCheckBox resim;
    private ButtonGroup butonGrup;

    public JButonlar()
    {

    // isim : JLabel
    isim = new JLabel("İsim-Soyisim");
    this.add(isim);
    // isimKutusu : JTextField
    isimKutusu = new JTextField(10);
    this.add(isimKutusu);



    // butonGrup1 : ButtonGroup
    butonGrup = new ButtonGroup();

    this.add(new JLabel("Cinsiyet : "));

    // radioButonlar : JRadioButton
    erkek = new JRadioButton();
    butonGrup.add(erkek);
    this.add(new JLabel("Erkek"));
    this.add(erkek);
    bayan = new JRadioButton();
    butonGrup.add(bayan);
    this.add(new JLabel("Bayan"));
    this.add(bayan);

    this.add(new JLabel("Kayıt yaptırmak istediği kurslar :"));
    dans = new JCheckBox();
    this.add(new JLabel("Dans "));
    this.add(dans);
    gitar = new JCheckBox();
    this.add(new JLabel("Gitar "));
    this.add(gitar);
    resim = new JCheckBox();
    this.add(new JLabel("Resim "));
    this.add(resim);

    // tamamButon : JButton
    tamamButon = new JButton("Tamam");
    this.add(tamamButon);

    // TEMEL PENCERE İSLEVLERİ
    this.setTitle("Butonlar Demo");
    this.setLayout(new FlowLayout());
    this.setBounds(50,50,230,300);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    public static void main(String[] args)
    {
    new JButonlar();
    }

    }


    ekran görüntüsü :
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Olay basit.RadioButon'ları kullanmak için öncelikle bir ButtonGroup oluşturun ve butonları bu grup içine ekleyin.Butonlardan birini seçtiğinizde gruptaki diğer butonların seçimi kaldırılacaktır.
    Butonları seçmek için veya seçimi kaldırmak için : setSelected(Boolean) metodunu kullanabilirsiniz.
    Seçimi kontrol etmek (yani kutucuğun işaretlenip işaretlenmediğini anlamak) için : isSelected() metodunu kullanabilirsiniz.

    Daha ayrıntılı bilgi için:

    docs.oracle.com
    JRadioButton (Java Platform SE 6)
    http://docs.oracle.com/javase/6/docs/api/javax/swing/JRadioButton.html





    8. DERS : OLAY GÜDÜMLÜ PROGRAMLAMA : EVENTS [30.12.2012]

    GUI programlamanın en önemli kısımlarından birisi olan olaylar konusuna geldik.Şimdiye kadar anlattığım konular yalnızca GUI bileşenlerinin ekranda gösterimi ile ilgiliydi. Bu bileşenleri nasıl kullanacağınızı anlayabilmek için olay mekanizmasının iyi kavranması gerekiyor.

    Olay nedir ?
    Bilgisayarınızda yaptığınız her bir etkileşim , her işlem , farenize her tıklamanız , fareyi sürüklemeniz , klavyenizin bir tuşuna basmanız vs. her eylem programlamada olay (event) olarak tanımlanır.
    Bilgisayar (programınız) olayları işleyerek kullanıcıya cevap verir.Bu nedenle oluşturduğunuz GUI bileşenleri , doğru olay mekanizması kurulmadığı sürece yalnızca görüntüden ibarettir.Olay mekanizmasının çalışma prensibini kısaca açıklayacak olursak :

    - Programcı oluşturduğu bileşenlere birer dinleyici atar.
    - Dinleyici (Listener) denilen özel thread'ler program boyunca atamalarının yapıldığı nesne üzerinde, ilgili oldukları olayların oluşup oluşmadığını denetler.Olay meydana geldiğinde dinleyici tetiklenmiş olur.
    - Tetiklenen dinleyici , olay işleyicisi (handler) denilen bir metodu çalıştırır.Böylece olaya karşılık gerekli işlemler dizisi başlatılmış olunur.

    Yani bir olay 4 temel parça ile işleniyor diyebiliriz.
    1. Olay nesnesi (Event object)
    2. Olay kaynağı (Event source)
    3. Olay dinleyicisi (Event Listener)
    4. Olay işleyicisi (Event Handler)

    Java'da olay mekanizması için gerekli metodlar AWT kütüphanesi içinde bulunur.Aşağıdaki diyagramda olay sınıfları ile diğer swing sınıfları arasındaki ilişkileri görebilirsiniz.


    Bir örnek üzerinden devam edelim :
     

    public JButton buton = new JButton("Tıkla");

    buton.addActionListener(new ActionListener()
    {

    public void actionPerformed(ActionEvent e)
    {
    JOptionPane.showMessageDialog(null , "Merhaba !");
    }

    });



    Yukarıdaki örnekte bir buton oluşturduk ve tıklandığında ekrana "Merhaba !" mesajının çıkmasını sağladık.

    Olay nesnemiz e isimli ActionEvent nesnesi.Olay kaynağımız ise tabiki buton'un kendisi.Olay kaynağı bileşene ihtiyaç duyarsanız olay nesnesi üzerinden getSource() metodunu kullanarak çağırabilirsiniz.Örneğin bu program parçası için :

    (JButton) e.getSource();

    komutu ile butonumuzun referansına erişebiliriz.

    addActionListener() metodu ile butonumuza bir dinleyici atadık.Bu komut sayesinde programın arkaplanında sürekli u dinleyici buton için tetikte bekleyecek ve olay oluştuğunda yani butona tıklandığında devreye girerek olay işleyicisi metodu çalıştıracak.Olay şileyici metodumuz ise bu programcıkta actionPerformed() metodu.

    Yani size düşen tek iş oluşturduğunuz nesneye bir dinleyici atamak ve bu dinleyici sınıfın içindeki implement edilmemiş abstract handler metodların gövdelerini yazmak.Bu örnekte listener'ı argüman olarak metod parantezleri içinde yazdık .Daha sade ve anlaşılır olarak isterseniz listener sınıfını ayrıca yazabilirsiniz.(Listener'lardan sınıf olarak bahsetsemde bu ağız alışkanlığında ileri geliyor. Listener'lar aslında birer interface 'dir. )

    Gerekli listener arayüzünü yazdığınız sınıfa implement edip bileşenlerinize listener olarak bu sınıfları atayabilirsiniz. Örnekten daha iyi anlaşılacaktır.

     

    public class dinleyici implements ActionListener
    {

    public dinleyici()
    {

    }

    @Override
    public void actionPerformed(ActionEvent)
    {
    JOptionPane.showMessageDialog(null , "Merhaba !");
    }

    }



    Dinleyici sınıfımızı yukarıdaki gibi yazdıktan sonra geriye bu dinleyiciyi ilgili nesneye atamak kalıyor :

     

    public JButton buton = new JButton("Tıkla");

    buton.addActionListener(new dinleyici());


    Hepsi bu kadar.

    Tabiki önemli bir noktada hangi işte hangi interface gerekli bilinmelidir.Örnekte kullandığımız ActionListener , daha çok butonlarla kullanılan bir dinleyici.
    Fare ile ilgili olaylarda MouseListener , MouseMotionListener vs.
    Klavye ile ilgili olaylarda KeyEvent ..vs.
    Pencere olaylarında FocusEvent ..vs. çeşitli dinleyici arayğzleri kullanılmaktadır.

    Daha ayrıntılı bilgi için :
    docs.oracle.com
    Lesson: Writing Event Listeners (The Java™ Tutorials > Creating a GUI With JFC/Swing)
    http://docs.oracle.com/javase/tutorial/uiswing/events/index.html


    Hangi listener'ın hangi bileşene hizmet verdiği ile ilgili liste :
    docs.oracle.com
    Listeners Supported by Swing Components (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
    http://docs.oracle.com/javase/tutorial/uiswing/events/eventsandcomponents.html







    9. DERS : MENULER : JMenu , JMenuBar , JMenuItem [01.01.2013]

    Bu derste programınıza nasıl menü çubuğu ekleyebileceğinizi anlatacağım.Menü çubuğu hemen hemen tüm masaüstü işletim sistemleri için bir klasiktir.JFrame sınıfı içerisinde de standart olarak tanımlı olan fakat varsayılan durumu null olarak bekleyen bir menuBar vardır.

    Öncelikle tanımlarını aktarayım :
    - MenuBar : (Swing'te JMenuBar olarak geçer) Dosya,Düzen,Görünüm vs. elemanların tutulduğu çubuk.
    - Menu : (Swing'te JMenu olarak geçer) Dosya , Düzen , Görünüm vs. elemanlarının her birisi.
    - MenuItem : (Swing'te JMenuItem olarak geçer) Menu'lere tıklandığında açılan alt menu elemanlarına denir.

     #JAVA GUI PROGRAMLAMA DERSLERİ#

    Örnek üzerinde görelim:
     

    public class MenuDemo
    {
    public JFrame pencere;
    public JMenuBar menuBar;
    private JMenu dosya,duzen,gorunum,yardim,altMenu;
    private JMenuItem menu1,menu2,menu3,menu4,menu5,menu6;

    public MenuDemo()
    {
    pencere = new JFrame("Java Menu Demo");
    pencere.setSize(500 , 600);
    pencere.setResizable(false);
    pencere.setVisible(true);
    pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    menuEkle();
    }

    public void menuEkle()
    {

    //MENUBAR
    menuBar = new JMenuBar();
    pencere.setJMenuBar(menuBar);


    //MENU ELEMANLARI
    dosya = new JMenu("Dosya");
    dosya.setMnemonic('D');
    menuBar.add(dosya);
    duzen = new JMenu("Düzen");
    duzen.setMnemonic('z');
    menuBar.add(duzen);
    gorunum = new JMenu("Görünüm");
    gorunum.setMnemonic('G');
    menuBar.add(gorunum);
    yardim = new JMenu("Yardım");
    yardim.setMnemonic('Y');
    menuBar.add(yardim);


    //MENU SECENEKLERI
    menu1 = new JMenuItem("Alt Menu 1");
    dosya.add(menu1);

    menu2 = new JMenuItem("Alt Menu 2");
    dosya.add(menu2);
    //ALT MENULER
    dosya.addSeparator();
    altMenu = new JMenu("Alt Menu 3");
    dosya.add(altMenu);

    menu3 = new JMenuItem("Çıkış");
    altMenu.setMnemonic('Ç');
    altMenu.add(menu3);
    menu3.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    int secim = JOptionPane.showConfirmDialog(null,
    "Çıkmak istediğinize emin misiniz ?",
    "Çıkış",
    JOptionPane.YES_NO_OPTION);

    if (secim == JOptionPane.YES_OPTION)
    System.exit(0);
    else
    return;
    }

    });

    menu4 = new JMenuItem("Alt Menu 4");
    duzen.add(menu4);

    menu5 = new JMenuItem("Alt Menu 5");
    gorunum.add(menu5);

    menu6 = new JMenuItem("Alt Menu 6");
    yardim.add(menu6);

    }
    }



    Verdiğim örnekte menuEkle() metodunu inceleyelim.JFrame sınıfında varsayılan tanımlı bir menuBar nesnesinin olduğunu söylemiştim.Yeni bir JMenuBar nesnesi oluştuduktan sonra setJMenuBar() metodu ile penceremizin menuBar'ının olşturduğumuz menuBar olmasını sağlıyoruz.MenuBar nesnelerinin kendilerine ait birer konteyner'ı bulunur.Yani add() metodu içerirler.Bumetodu kullanarak Menu'lerimizi menuBar üzerine ekliyoruz.Eklediğimiz sıra ile menü çubuğuna yerleşirler.
    setMnemonic() metodu bir char değişken alır ve Menu elemanlarının klavyenin hangi tuşuna atamasının yapılacağını belirler.Bu karakter altı çizili olarak belirtilir.

    MenuItem nesnelerini ise oluşturduktan sonra menuler içine yine add() metodunu kullanarak ekliyoruz.
    MenuItem elemanlarını gruplamak için aralarına çizgi çekebilirsiniz. Bunun için addSeperator() metodu kullanılır.

    Ayrıca menu elemanlarının kullanımı da butonlardan farksızdır.ActionListener arayuzlerini implement ederek istediğiniz handler'ı ekleyebilirsiniz.
    Ben örnekte programda çıkış için bir "Emin misiniz ?" kodu yazdım.Yani çıkış isimli menuItem'a tıklandığında ekrana
     #JAVA GUI PROGRAMLAMA DERSLERİ#
    şeklinde bir uyarı mesajı geliyor.





    10. DERS : Labels - Etiketler : JLabel [23.06.2013]

    GUI bileşenleri içerisinde en sık kullanılan bileşenlerden biri de label, yani etiketlerdir. Etiket bir metin veya resmin GUI üzerine basılmasında kullanılır. Görsellik amacıyla kullanıldığı gibi, buton olarak da kullanılabilir. Tek fark JButton sınıfında listener olarak ActionListener kullanırken, JLabel için MouseListener kullanılır. Swing'te label için kullanılan sınıf JLabel sınıfıdır.

    Örnek verelim;
     #JAVA GUI PROGRAMLAMA DERSLERİ#


    Bu örnekte gördüğünüz üzere label, hem resim hem metin görüntüleme amacıyla kullanılabilir. Fakat görüntülenen metinler de aynen resimler gibi label üzerine "çizilir". Yani metnin string özelliği kalmaz. Bu nedenle TextField gibi düzenlenebilir metin kutusu amacıyla kullanılmaz.

    Buton yapımı ve mouse listener sınıflarının kullanımı ;
     

    import javax.swing.JLabel;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;

    public class LabelButtonDemo extends JFrame
    {
    JLabel b1;

    public LabelButtonDemo()
    {
    b1 = new JLabel("Buton 1");
    b1.setToolTipText("İmleci butonun üzerine getirdiğinde bu yazı çıkar.");
    b1.addMouseListener(new LabelButonMouseListener());
    b1.setBounds(10,10,120,40);
    this.add(b1);
    }

    public class LabelButonMouseListener implements MouseListener, MouseMotionListener
    {
    @Override
    public void mouseDragged(final MouseEvent e)
    {
    // Fare basılı halde sürüklendiğinde çalışır
    }

    @Override
    public void mouseMoved(final MouseEvent e)
    {
    // Fare hareket ettirildiğinde çalışır
    }

    @Override
    public void mouseClicked(final MouseEvent e)
    {
    // Tıklama anında çalışır
    }

    @Override
    public void mouseEntered(final MouseEvent e)
    {
    // İmleç, label alanına girdiğinde çalışır
    }

    @Override
    public void mouseExited(final MouseEvent e)
    {
    // İmleç, label alanından çıktığında çalışır
    }

    @Override
    public void mousePressed(final MouseEvent e)
    {
    // Mouse tuşuna tıklandığında çalışır.
    }

    @Override
    public void mouseReleased(final MouseEvent e)
    {
    // Mouse tuşu bırakıldığında çalışır
    }

    }
    }



    EK 1 : paint() , paintComponent() metodları [18.06.2013]

    Arkadaşlar, java 'da bir swing bileşeninin render metodlarını override ederek, farklı GUI bileşenleri tasarlamamız mümkündür. (*Override : Nesne yönelimli programlamanın güçlü bir özelliğidir. Bir metodu, işlevlerini kaybetmeden, geliştirebilir, tekrar yazarak veya eklemeler yaparak amaçlarımıza uygun forma sokabiliriz.) Java dilinde bu işlemi awt kütüphanesinden gelen paint() metodlarını override ederek yapabiliriz.

    Java dilinde Swing'e ait bir widget veya herhangi bir arayüz bileşeni render edilirken kullanılan UI (look and feel) ye ait paint() metodu çağrılır. Pencere ve bileşenlerin ekrana çizimini sağlayan metod paint() metodudur. Doğrudan doğruya çağrılamaz. Gerekli durumlarda çizimi tetiklemek için repaint() metodu kullanılmalıdır. paintComponent(), paintBorder() ve paintChildren() .. alt metodlar ise, ( bileşene göre farklılık gösterebilir ) paint metodu tarafından kullanılır. Yani kapsayıcı bir metoddur. Bileşen gövdesi paintComponent() metodu ile render edilir.
    paint() metodu Graphics sınıfından üretilmiş bir nesneyi parametre olarak kullanır. Bu graphics nesnesini, çizimi yapan fırça olarak düşünebilirsiniz. Bütün çizim metodları (drawLine(), drawString() vs.) bu nesne yolu ile çağrılır.

    Genel kullanım :

     
    @override
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);

    // ...
    g.drawLine(10,10,50,50);
    // ...
    }


    super işleci, temel sınıfa (parent-base class) ait override edilmemiş metodu çağırır. Türetilmiş bir sınıf ile çalışıyorsanız gerekli olabilir.

    Ne amaçla kullanılabilir ?

    Örnekler;
     #JAVA GUI PROGRAMLAMA DERSLERİ#
    Bu örnekte grafik çizimi için JPanel sınıfından türetilmiş Grafik sınıfı kullanılmış. Grafiğin çizimi ise paintComponent() metodu override edilerek sağlanıyor.

     #JAVA GUI PROGRAMLAMA DERSLERİ#
    Bu örnekte ise lojik devre elemanlarını, kapıları örnek verebiliriz. Tümü Swing'e ait bileşenlerden üretilmiştir. Çizim metodları değiştirilerek yeni sınıflar ve yeni GUI bileşenleri oluşturulmuştur.





    < Bu mesaj bu kişi tarafından değiştirildi AERO. -- 23 Haziran 2013; 20:13:08 >







  • quote:

    Orijinalden alıntı: KibritVsÇakmak

    Devam edecek misiniz derslere?


    Boş vakit buldukça sıradaki konularla devam etmeye çalışacağım.
  • quote:

    Orijinalden alıntı: KibritVsÇakmak

    Bu mesaj silindi.

    Alıntıları Göster
    derslere devam edecekmisiniz acaba yada siteniz falan var mı benim bir ödevim var da yardım gerekli
  • quote:

    Orijinalden alıntı: berkan6792

    derslere devam edecekmisiniz acaba yada siteniz falan var mı benim bir ödevim var da yardım gerekli

    Alıntıları Göster
    takip. derslerin devamını bekliyoruz hocam.
  • takip.
  • quote:

    Orijinalden alıntı: az sakallı dede

    takip.
    Yoğunluktan dolayı uzunca bir ara vermek zorunda kaldım fakat derslerin devamı gelecektir.Kafamdaki plana göre konuları tamamlayacağım.
  • quote:

    Orijinalden alıntı: AERO.

    Yoğunluktan dolayı uzunca bir ara vermek zorunda kaldım fakat derslerin devamı gelecektir.Kafamdaki plana göre konuları tamamlayacağım.

    Alıntıları Göster
    Geliştirme ortamınız hakkında bilgi verebilir misiniz?

    işletim sisteminiz
    kullandığınız IDE
    java version
    3rd party olarak temin edilmesi gereken jar vs gibi kaynaklar.
  • Yapay Zeka’dan İlgili Konular
    C programlama
    5 yıl önce açıldı
    Python ders önerisi
    2 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: xpug

    Geliştirme ortamınız hakkında bilgi verebilir misiniz?

    işletim sisteminiz
    kullandığınız IDE
    java version
    3rd party olarak temin edilmesi gereken jar vs gibi kaynaklar.


    Windows 8 veya ubuntu kullanıyorum.
    IDE olarak Eclipse
    java 7 update 9 (build 1.7.0_09) sürümü
    bu konu ile ilgili standart kütüphaneler dışında extra bir kaynağa ihtiyaç yok
  • quote:

    Orijinalden alıntı: AERO.

    quote:

    Orijinalden alıntı: xpug

    Geliştirme ortamınız hakkında bilgi verebilir misiniz?

    işletim sisteminiz
    kullandığınız IDE
    java version
    3rd party olarak temin edilmesi gereken jar vs gibi kaynaklar.


    Windows 8 veya ubuntu kullanıyorum.
    IDE olarak Eclipse
    java 7 update 9 (build 1.7.0_09) sürümü
    bu konu ile ilgili standart kütüphaneler dışında extra bir kaynağa ihtiyaç yok

    Alıntıları Göster
    hocam benim acil bir kaç sorum varda size mail yoluyla falan ulaşmam mümkün mü acaba ?




  • quote:

    Orijinalden alıntı: berkan6792

    hocam benim acil bir kaç sorum varda size mail yoluyla falan ulaşmam mümkün mü acaba ?

    Alıntıları Göster
    Konu kalabalığında fark etmemişim, çok güzel anlatmışsın ellerine sağlık
  • quote:

    Orijinalden alıntı: Guest

    Konu kalabalığında fark etmemişim, çok güzel anlatmışsın ellerine sağlık

    Alıntıları Göster
    Emeğinize sağlık devamını beklemekteyiz.
  • quote:

    Orijinalden alıntı: predator_7

    Emeğinize sağlık devamını beklemekteyiz.

    Alıntıları Göster
    Bir de paintComponent ve super.paintComponent konuları hakkında bilgi verebilir misiniz ?
  • quote:

    Orijinalden alıntı: predator_7

    Bir de paintComponent ve super.paintComponent konuları hakkında bilgi verebilir misiniz ?


    Dilim döndüğünce açıklamaya çalıştım. İlk mesaj üzerinden güncellendi. Kolay gelsin.
  • quote:

    Orijinalden alıntı: AERO.

    quote:

    Orijinalden alıntı: predator_7

    Bir de paintComponent ve super.paintComponent konuları hakkında bilgi verebilir misiniz ?


    Dilim döndüğünce açıklamaya çalıştım. İlk mesaj üzerinden güncellendi. Kolay gelsin.

    Alıntıları Göster
    Çok teşekkürler




  • quote:

    Orijinalden alıntı: predator_7

    Çok teşekkürler

    Alıntıları Göster
    Eline sağlık hocam çok güzel olmuş
  • quote:

    Orijinalden alıntı: Guest-73A8A7D1E

    Bu mesaj silindi.

    Alıntıları Göster
    Hocam bu Swig, AWT ye göre daha mı güzel/sanatsal görünür yoksa aynı şeyi awt ile de yapabilir miyiz?
  • quote:

    Orijinalden alıntı: Tugrul_512bit

    Hocam bu Swig, AWT ye göre daha mı güzel/sanatsal görünür yoksa aynı şeyi awt ile de yapabilir miyiz?


    Her iki kütüphane de aynı amaç için yazılmıştır fakat çalışma şekilleri farklı. AWT, işletim sisteminin sağladığı API'leri kullanırken swing kendi çizim prosedürlerini kullanır. Bu nedenle awt, farklı sistemlerde farklı sonuçlar verebilir. Tutarsız, hatalı programlara neden olabilir ve bu durum java'nın platformdan bağımsız kalma ilkesine ters düşer. Swing gibi yeni bir kütüphaneye bu nedenle ihtiyaç duyulmuştur. Yani görsel estetik kaygısı ile swing'e geçiş gibi bir durum söz konusu değil.
  • quote:

    Orijinalden alıntı: AERO.

    quote:

    Orijinalden alıntı: Tugrul_512bit

    Hocam bu Swig, AWT ye göre daha mı güzel/sanatsal görünür yoksa aynı şeyi awt ile de yapabilir miyiz?


    Her iki kütüphane de aynı amaç için yazılmıştır fakat çalışma şekilleri farklı. AWT, işletim sisteminin sağladığı API'leri kullanırken swing kendi çizim prosedürlerini kullanır. Bu nedenle awt, farklı sistemlerde farklı sonuçlar verebilir. Tutarsız, hatalı programlara neden olabilir ve bu durum java'nın platformdan bağımsız kalma ilkesine ters düşer. Swing gibi yeni bir kütüphaneye bu nedenle ihtiyaç duyulmuştur. Yani görsel estetik kaygısı ile swing'e geçiş gibi bir durum söz konusu değil.

    Alıntıları Göster
    Bence gui öğrenmek isteyenlere çok faydalı bir döküman olmuş.
    Emeğiniz için ve bunları paylaştığınız için teşekkürü bir borç bilirim.




  • quote:

    Orijinalden alıntı: Guest-FCE83504C

    Bence gui öğrenmek isteyenlere çok faydalı bir döküman olmuş.
    Emeğiniz için ve bunları paylaştığınız için teşekkürü bir borç bilirim.

    Alıntıları Göster
    Arkadaşlar merak ettiğim bir konu var. C#'ta forma ve form kontrollerine görsellik katmak için (Ör. border-radius, gradient-background) WPF kullanılması gerek. Java'da bu durum nasıl?




  • quote:

    Orijinalden alıntı: Cigarette Smoking Man

    Arkadaşlar merak ettiğim bir konu var. C#'ta forma ve form kontrollerine görsellik katmak için (Ör. border-radius, gradient-background) WPF kullanılması gerek. Java'da bu durum nasıl?

    Alıntıları Göster
    takip
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.