SWING İle GRAFİKSEL UYGULAMALAR-I



Benzer belgeler
Java da. ve AWT ve SWING Kütüphaneleri. BBS-515 Nesneye Yönelik Programlama. Ders #8 (9 Aralık 2009)

Görsel Programlama DERS 07. Görsel Programlama - Ders07/ 1

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

MOBİL UYGULAMA GELİŞTİRME

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Görsel Programlama DERS 08. Görsel Programlama - Ders08/ 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

ORNEK 1: Tarım Makinaları ve Teknolojileri Mühendisliği başlıklı çerçeve üretme.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Ekle Menüsü İşlevleri ÜNİTE 3. Bu üniteyi çalıştıktan sonra; Ekle Menüsü Çizimler Grafikler Bağlantılar Metin

Java da İstemci Tarafı Uygulamalar

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Burak Kıymaz JAVA FX

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

APPLET KAVRAMI ve GRAFİKSEL ÇİZİM UYGULAMLARI

Android Ders Notları

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

Applet Form Örnekleri2

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

MOBİL UYGULAMA GELİŞTİRME

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Sunu: Belli bir konunun resim, grafik, metin, ses ve görüntüler kullanılarak giriş, gelişme, sonuç bölümleriyle sıralı ve düzenli bir şekilde

JavaFX Temelleri (1)

JComponent in alt sınıfları

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Proje de saga tıklayıp new diyoruz. Normal java classı kullanacağız.swing kullanmayacağız.

Java Programlamada Paket Yapısı Ve Import

MOBİL UYGULAMA GELİŞTİRME

Sunum İçeriği. Programlamaya Giriş

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

GtkD ile Görsel Programlama

BİL-141 Bilgisayar Programlama I (Java)

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

Progress Barlı, FTP Dosya Upload Appleti

ASP.NET ile Bir Web Sitesi Oluşturma

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Stok Kısıt Tanımları. [X] Fusion Standard. [X] Entegre W3 [X] STOK.DLL, DBUPDATE. [X] DBUPDATE Programının Çalıştırılması

Proje 1. Arayüz Tasarımı

Programlama Dillerinde Kullanılan Veri Tipleri

Fatura Dinamik Kodlama İyileştirmeleri

HSancak Nesne Tabanlı Programlama I Ders Notları

Bölüm 22. Java GUI Kütüphanesi SWT GUI Kütüphanesi SWING GUI Kütüphanesi İlk Swing Programı

YAZILIM İSTERLERİ ÇÖZÜMLENMESİ

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Excel Nedir? Microsoft Excell. Excel de Çalışma sayfası-tablo

Klavyeden Basit Giriş/Çıkış İşlemleri

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Java Applet Üzerinde Form Nesneleri Ve Listener Özelliği

C# Form Uygulamaları. Nesne Tabanlı Programlama I (C#) Ders Notu. S.Ü.Akören A.R.E. Meslek Yüksekokulu C.ÖZCAN- F.SARAY

OÖ lçu mu Uygulaması

PROGRAMLAMA DERSİ 1. İNTERNET

Hitit R5 Ayarları. Hitit R5 Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

KİTaS, ortaokul öğrencileri için MEB tarafından tavsiye edilen 100 temel eserin öğrenci okumalarının

Javada Veri Tabanı İşlemleri

7. BELGEYE RESİM EKLEME, YAZIM ve ÇİZİM ÖZELLİKLERİ

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi KULLANICI ARAYÜZ. BLM401 Dr.Refik SAMET

D İ Z İ L E R A R R A Y S

BTU 100 Bilgisayar okuryazarlığı EXCEL BTU 100 BİLGİSAYAR OKURYAZARLIĞI. Excel de Dosya Tablo ve Grafik Oluşturma

Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel

YZM 2105 Nesneye Yönelik Programlama

Java Applet Üzerine Form Nesnelerini Eklemek

KTO KARATAY ÜNİVERSİTESİ Temel Bilgisayar 2. Hazırlayan : Erdem YAVUZ

Response : Sunucunun istemciye veri yollamasını


Sayfa Düzeni İşlevleri ÜNİTE 4. Bu üniteyi çalıştıktan sonra;

CENG 217 Object Oriented Design. Doç. Dr. Halûk Gümüşkaya /

NESNEYE YÖNELİK PROGRAMLAMA

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

MİKRO PROGRAMININ GÜNCELLENMESİ

Üst Düzey Programlama

11. TASARIM ŞABLONU KULLANARAK SUNU HAZIRLAMAK

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

YZM 2105 Nesneye Yönelik Programlama

HSancak Nesne Tabanlı Programlama I Ders Notları

İNTERNET TABANLI PROGRAMLAMA

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi YAYIN ALICILARI. BLM401 Dr.Refik SAMET

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

Karar Destek Sistemi (DSS) Yazılımı ve Arayüzü

MOBİL UYGULAMA GELİŞTİRME

6. NESNE İŞLEMLERİ Şekil Ekleme. Bu bölümde nesne eklemeyi ve biçimlendirmeyi öğreneceğiz.

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

Data Structures Lab Güz

Ecat 8. Hakbim Bilgi İşlem A.Ş. Versiyon

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

UYGULAMALAR. İkinci liste kutusu (List 2) Birinci liste Kutusu (List 1) Metin Kutusu

10)Bir pencerede bulunan sıralı olmayan simgeleri seçebilmek için hangi yardımcı tuş kullanılır? a-)alt b-)ctrl c-)shift d-)caps Lock e-)enter

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Transkript:

SWING İle GRAFİKSEL UYGULAMALAR-I Hedefler Bu üniteyi çalıştıktan sonra; AWT ve SWING kavramlarını öğreneceksiniz, SWING bileşenlerini tanıyacaksınız, Java GUI yapısını oluşturan bileşenleri öğreneceksiniz, Konteyner (container) kavramını öğreneceksiniz, Yerleşim planı düzenleyicilerini (Layoutları) öğreneceksiniz,

2 İçindekiler SWING ile GRAFİKSEL KULLANICI ARAYÜZÜ (GUI) PROGRAMLAMA Giriş Temel GUI Bileşenleri SWING ile uygulamalar geliştireceksiniz, Yerleşim planı düzenleyicileri ( Layout yöntemleri) Konunun Özeti Değerlendirme Soruları Sayfa 2

3 SWING ile GRAFİKSEL KULLANICI ARAYÜZÜ (GUI) PROGRAMLAMA Giriş Java dili, programcılara grafik uygulamalar için geniş imkânlar sunar, bu özelliği ile hareket bağımlı (Eventdriven ) bir dilin tüm özelliklerine sahiptir. Buton, pencere, metin ve resim kutusu, menüler vb. kontrol nesneleri yardımıyla kullanıcı ile etkileşimli grafiksel kullanıcı ara yüzü (Graphical User Interface-GUI) oluşturabilirsiniz. GUI ile programlarımıza görsellik kazandırmış oluruz. AWT (Soyut Pencereler Araç Kiti-Abstract Window Toolkit), Java ile birlikte geliştirilen ilk temel grafiksel kullanıcı ara yüzü oluşturma kütüphanesine verilen isimdir. AWT, pencere tabanlı- grafiksel ara yüz desteği sağlar. Ancak Java 2 platformu ile birlikte AWT yetersiz görülmüş ve çok daha geniş ve gelişmiş özelliklere sahip SWING Kütüphanesi ( AWT ye göre yüzlerce yeni sınıfın eklendiği ) sisteme eklenmiştir. Swing bileşenleri, AWT bileşenleri ile aynı ismi taşırlar, tek fark J harfi ile başlamalarıdır (Button JButton, Label JLabel, CheckBox JCheckBox gibi ) diyebiliriz. SWING, Java Koleksiyon Yapısı (JFC- Java Collections Framework) nın bir üyesidir ve tamamen Java dili ile yazılmıştır. Swing, bütün platformlarda aynı şekilde davranabilen ve görünümü değişmeyen (AWT bileşenleri, Windows ta farklı, MacOS da farklı görülebiliyordu) arayüzler sunar ve platform bağımsızdır. Grafiksel kullanıcı ara yüzü oluşturmak ve uygulama geliştirmek için java.awt ve javax.swing olmak üzere iki temel bileşen kümesindeki paketler kullanılır. Kontrol nesnelerini kullanabilmek için bu iki bileşen ve ilgili alt sınıflarını program başlangıcında çağırmak gerekir. Şekil 2 de verilen SWING bileşenlerinin hiyerarşik yapısındaki sınıfları açıklayacak olursak, en üst (top level) seviyede barındırıcı (container-konteyner) sınıflar bulunur. Konteynerler diğer bileşenleri içinde barındırabilen özel bileşenlerdir. Bu tür konteynerler içerisinde başka üst düzey konteyner tanımlanamaz. Bunlar; JApplet: SWING tabanlı applet yazımında kullanılır. JApplet sınıfı jawax.swing.japplet paketi ile çağrılır / import edilir. JDialog: Kullanıcı ile iletişim kurmada JOPtionePane benzeri diyalog pencereleri açan bir konteynerdir. JDialog sınıfı javax.swing.jdialog paketi ile çağrılır / import edilir. Sayfa 3

4 JFrame: Diğer SWING bileşenlerini barındıran bir penceredir. JFrame sınıfı javax.swing.jframe paketi ile çağrılır / import edilir. JWindow: Kullanıcının masaüstünde herhangi bir yerinde görebileceği bir konteynerdir. Uygulamanızda örneğin bir başlık çubuğu, minimize, maximize butonları olmayan bir pencere oluşturmak için JWindow konteynerini kullanabilirsiniz. JWindow sınıfı javax.swing.jwindow paketi ile çağrılır / import edilir. Swing in sunduğu bir diğer konteyner türü ise gruplayıcı konteynerlerdir. Bunlar aynen bileşenler (components) gibi davranırlar ve iç içe birçok bu türden konteyner tanımlanabilir. Gruplayıcı konteynerlar, GUI üzerinde kullanılan JButton, JTextArea, JLabel gibi bileşenleri ve diğer gruplayıcı konteynerları gruplamak, bir arada tutmak için tasarlanmıştır. JPanel ve JTextComponent, JMenuItem gibi bileşenler bu tür konteynerlere örnek olarak verilebilir. Şekil 2. Java SWING Bileşenlerinin Hiyerarşik Yapısı. Sayfa 4

5 Temel GUI (AWT ve Swing) Bileşen ve Olayları Java ile aşağıdaki bileşenleri kullanarak grafiksel ara yüze sahip programlar geliştirilebilir. Netbeans, Eclipse veya Jbuilder gibi bir editör ile grafiksel ara yüz tasarlamak çok daha kolaydır. Örneğin Eclipse programı kullananlar http://eclipse.org/windowbuilder/download.php adresinden WindowBuilder programını kurduklarında aşağıdaki gibi hazır Java GUI bileşenlerini görebilir ve programlarında kullanabilirler. WindowBuilder programını açıklayan İngilizce dokümantasyonuna http://help.eclipse.org/indigo/index.jsp?topic=%2forg.eclipse.wb.doc.user%2fhtml%2findex.html adresinden ulaşabilirsiniz. Sayfa 5

6 Fakat biz programımızda hazır araçları kullanmayacağız, bu bileşenleri kod ile oluşturacak ve programlarımızı ona göre tasarlayacağız. Programlarımızda kullanacağımız bazı AWT ve SWING bileşenleri (J harfi ile başlayanlar) ve işlevleri aşağıdaki tabloda gösterilmiştir. Bu bileşenlerin birçoğu ortak metotları kullanırlar { show(), setfont(), setlabel(), settext(), gettext() gibi. Ayrıca tüm bileşenler başta klavye ve mouse olayları olmak üzere ortak olaylara sahiptir {keypressed(),mouseclicked(). Not: Tüm Swing bileşenlerini http://java.sun.com/docs/books/tutorial/ui/features/components.html adresinden inceleyebilirsiniz. Bir bileşeni java dilinde tanımlamak için aşağıdaki yapı kullanılır: Bileşen_adı değişken = new Bileşen_adi ( Başlık ); Örneğin Sayfa 6

7 Buton nesnesini eklemek için; JButton btn1=new JButton("Buton1"); Frame nesnesini eklemek için; JFrame cerceve = new JFrame("Çerçeve Başlığı"); Yapıları kullanılır. YERLEŞİM PLANI DÜZENLEYİCİLERİ (LAYOUT MANAGERS) Bir çerçeve veya pano içerisine bileşenler (butonlar, checkboxlar, vs ) yerleştirildiğinde o bileşenin çerçevenin neresine ve hangi boyutlarda yerleştirileceğine Yerleşim Planı Düzenleyicileri (Layout karar verir. Grafik uygulamalarında farklı layout yöneticileri kullanılabilir. Bunlardan bazıları; 1. FlowLayout // Bileşenler, çerçeveye satır satır ve soldan sağa doğru yerleştirilir. 2. BorderLayout Bileşenler 5 alana yerleştirilir; Doğu, Batı, Güney, Kuzey ve Merkez olmak üzere. 3. GridLayout Bileşenler, Excel tablosuna benzer şekilde ızgaralara yerleştirilir. 4. GridBagLayout : GridLayout un daha gelişmiş şeklidir, bir bileşen ızgara üzerinde birden fazla hücreye yerleştirilebilir. 5. CardLayout : Bileşenler, iskambil destesinde olduğu gibi üst üste yerleştirilir. Bir anda sadece biri gözükür. 6. BoxLayout : Bileşenleri, seçiminize göre, tek bir satır ya da sütuna (x ve y koordinatlarına göre) yerleştirir. Bileşenler çerçeveye sığmayınca bir alt satıra geçişe izin vermez. 7. GroupLayout : Bileşenleri hiyerarşik bir şekilde sıralı ya da paralel olarak gruplar. Sayfa 7

8 Bir konteynere hangi layout manager ı kullanacağını belirtmek için aşağıdaki metodu çağırın: setlayout( ); ve parametre olarak da bir layout manager ismi verin. Örneğin: BorderLayout belirtmek için: setlayout (new BorderLayout()); Burada örnek olması açısından sadece FlowLayout ve GridLayout u açıklayacağız. FlowLayout ile bileşenler, çerçeve içerisine satır satır ve sıra ile yerleştirilir. Layout yöneticisini, setlayout( ) yöntemini kullanarak aşağıdaki gibi tanımlıyoruz; setlayout(new FlowLayout() ); GridLayout ile kontrol nesnelerini Excel tablosuna benzer şekilde hücrelere (satır ve sütunlara) yerleştiriyoruz. Kullanım şekli; setlayout(new GridLayout(satır_sayisi, sütun_sayisi)); Örnek 1. Şekildeki gibi bir form üzerine programlama dillerini buton olarak yerleştiren Applet kodunu yazınız. Çözüm: import java.awt.flowlayout; import javax.swing.*; public class Ornek3 extends JApplet { public void init() { setlayout(new FlowLayout() ); JButton b1 = new JButton( "Java" ); JButton b2 = new JButton( "Visual Basic" ); JButton b3 = new JButton( "C#" ); add( b1 ); add( b2 ); add( b3 ); Sayfa 8

9 Örnek 2: Aynı programı Applet kullanmadan bir frame üzerinde gerçekleştiriniz. Çözüm: Bu örnekte Applet kullanmadan main metoduna kodu yazacağız. import java.awt.flowlayout; import javax.swing.*; public class Ornek4 { public static void main(string[] args) { JFrame Cerceve = new JFrame("Frame Örnegi"); Cerceve.setLayout(new FlowLayout()); JButton b1 = new JButton("Java"); JButton b2 = new JButton("Visual Basic"); JButton b3 = new JButton("C#"); // Butonlar çerçeveye yerleştirilir Cerceve.add(b1); Cerceve.add(b2); Cerceve.add(b3); Cerceve.setVisible(true);// Çerçeveyi ekranda gösterir Cerceve.pack(); // Nesneleri çerçeve boyutuna göre otomatik // boyutlandırır Örnek 3: Birçok web sitesinde karşılaştığımız kullanıcı adı ve şifre soran şekildeki gibi bir şifre ekranını GridLayout yöntemi ile yapalım. Sayfa 9

10 Çözüm: import java.awt.gridlayout; import javax.swing.*; public class SifreEkrani extends JPanel { public static void main(string[] args) { JTextField password, username; password = new JTextField(10); username = new JTextField(10); JFrame Cerceve = new JFrame("Sifre Ekranı Örneği"); Cerceve.setLayout(new GridLayout(2, 2)); // 2 sutunlu 1. satır Cerceve.add(new JLabel("Kullanıcı Adı:")); Cerceve.add(username); // 2 sutunlu 2. satır Cerceve.add(new JLabel("Şifre")); Cerceve.add(password); Cerceve.setSize(300, 200); //Çerçeve boyutu ayarlanıyor Cerceve.setVisible(true); //Çerçeve ekranda gösteriliyor Cerceve.pack(); //Nesneler çerçeve boyutuna göre yerleştiriliyor Örnek 4: Otomobil özelliklerini şekildeki gibi veren programı yazınız. Çözüm: import java.awt.*; import javax.swing.*; class Oto { public static void main(string[] args) { JFrame frame = new JFrame("Otomobil Özellikleri"); frame.setlayout(new FlowLayout()); JCheckBox oto1 = new JCheckBox("ABS"); oto1.setselected(true); // ABS seçildi JCheckBox oto2 = new JCheckBox("CD Çalar"); JCheckBox oto3 = new JCheckBox("Hava yastigi"); JCheckBox oto4 = new JCheckBox("Klima"); oto4.setselected(true); // Klima seçildi Sayfa 10

11 frame.add(oto1); frame.add(oto2); frame.add(oto3); frame.add(oto4); frame.pack(); // Çerçeveyi, nesnelerin boyutuna göre ayarlar frame.setvisible(true); Örnek 5: Cinsiyet seçimini şekildeki gibi yapan programı yazınız. import javax.swing.*; import java.awt.*; public class Cinsiyet extends JFrame { public static void main(string[] arg) { JFrame Cerceve = new JFrame("Cinsiyetiniz?"); Cerceve.setLayout(new FlowLayout()); JRadioButton cb1 = new JRadioButton("Erkek"); JRadioButton cb2 = new JRadioButton("Bayan"); cb2.setselected(true);// Başlangıçta Bayan seçili olsun Cerceve.add(cb1); Cerceve.add(cb2); Cerceve.setVisible(true); //Çerçeve ekranda gösteriliyor Cerceve.setSize(250, 80); //Çerçeve boyutu ayarlanıyor Örnek 6: Klavyeden girilen bir ismi hem konsolda hemde grafiksel ekranda gösteren Applet uygulamasını yapınız. import java.awt.*; import javax.swing.japplet; import javax.swing.joptionpane; public class sss extends JApplet { String ad; public void init() { ad = JOptionPane.showInputDialog(null, "Ad Giriniz"); System.out.println("Girilen isim: " + ad); public void paint(graphics g) { g.setcolor(color.red); g.drawstring(ad, 50, 50); Sayfa 11

12 Programın ekran çıktısı aşağıdaki gibi olur: Klavyeden Bulent girildiğinde hem konsola hem de grafiksel ekrana yazıldığını görürüz. Sayfa 12

SWING İle GRAFİKSEL UYGULAMALAR-II SWING Uygulamaları-I 13 Hedefler Bu üniteyi çalıştıktan sonra; Java olaylarını ve dinleyici metotlarını öğreneceksiniz, Hareket bağımlı uygulamalar geliştirebileceksiniz, Sayfa 13

14 İçindekiler SWING ile GRAFİKSEL KULLANICI ARAYÜZÜ (GUI) PROGRAMLAMA -II Giriş Olaylar (Events) ve Dinleyici (Listener) Metotları, Bazı Sık Kullanılan Olaylar ve Dinleyicileri Örnek Uygulamalar Değerlendirme Soruları Sayfa 14

15 Olaylar (Events) ve Dinleyici (Listener) Metotları Giriş Grafiksel ara yüz (GUI), pencereler, butonlar, menüler, etiketler, metin kutucukları gibi grafik bileşenleri (components) içerir. Bu bileşenler ile kullanıcının etkileşim kurması veya olaylara cevap vermesi, butona tıklanması, menüden bir seçenek seçilmesi, metin kutusuna veri girilmesi şeklinde gerçekleşir. Sistem, kullanıcının her etkileşiminde bir olay ( event ) üretir. Ve; Bileşenler bu olaylardan haberdar edilirler. Her bileşen kendi olayına göre olay dinleyici olarak kendini tanıtmakla ve ilgili ara yüzü tanımlamakla yükümlüdür. Java dilinde olaylar Event, dinleyiciler ise Listener deyimi ile ifade edilir. Kullanıcının program ile görsel iletişim kurduğu programlar hareket bağımlı (event-driven) programlardır. Bir uygulama, bir olaya / harekete bağlı bir kod üretecekse java.awt.event.* paketini programın başında çağırmamız gerekir. Hareket bağımlı (olay tabanlı) bir uygulama üç bileşene sahiptir. Bunlar; 1. Olay kaynağını oluşturan bileşenler (Grafiksel Kullanıcı Ara yüzü oluşturan nesnelerdir), 2. Uygulama metotları (İşlemleri gerçekleştiren kodlardır). 3. Olayları alan ve onlara cevap veren dinleyici (Listener) metotları, Örneğin bir web tarayıcı (Internet Explorer gibi) programı kontrol bileşenlerine (örneğin ileri, geri butonları), olayları tutan dinleyici metotlara (örneğin geri butonuna click yapılması gibi) ve işlemleri gerçekleştiren uygulama metotlarına ( bir sayfada ileri, geri gezinti gibi) sahiptir. Programcı olay gerçekleştiğinde çalışacak kodu (olay işleyici- event handler) yazmalıdır. Her olay işleyici ( event handler ) aşağıdaki kodları içerir. a. Sınıfa ait bir dinleyici ara yüz; public class SinifAdi implements ActionListener { b. Olay kaynağını oluşturan bileşenler için olay dinleyicileri yerleştirilir; bilesenadi.addactionlistener ( this) c. Olay işleyici sınıfın içinde, dinleyici ( Listener ) arayüzünün yöntemleri gerçekleştirilir; public void actionperformed (ActionEvent e) { Sayfa 15

16 Genel olarak kontrol bileşenlerinin alanlarına set / get metotlarıyla ulaşılabilir. Bu alanları değiştirerek bileşenin belli bir davranışta bulunması sağlanabilir. Bileşenlerin program çalışırken bazı olaylara (event) yanıt vermesi gerekir. Bazı Sık Kullanılan Olaylar ve Dinleyicileri ActionEvent olayı: Bir butona basıldığında, Enter tuşuna basıldığında veya menülerden bir seçim yapıldığında ActionEvent olayı oluşur. Olaylar, kullanıcı tarafından yazılan dinleyiciler (listener) tarafından yakalanabilir. Dinleyiciler, bir bileşene, belli bir olay türü için eklenir. ActionEvent olayı programcı tarafından bir ActionListener ile dinlenebilir. Bir dinleyici birden fazla kontrol bileşenini aynı anda dinleyebilir. ActionListener ile dinlenen olay kaynağında bir olay olduğunda (yani ActionEvent gerçekleştiğinde) çalışacak kod, actionperformed metoduna yazılmalıdır. ItemEvent olayı: Bir bileşen seçildiğinde ya da seçim kaldırıldığında gerçekleşen bir olaydır. Benzer şekilde ItemEvent olayı programcı tarafından ItemListener ile dinlenebilir ve ItemListener ile dinlenen olay olduğunda çalışacak kod, itemstatechanged metoduna yazılmalıdır. KeyEvent olayı: Klavye olaylarının ele alındığı bir sınıftır. Klavyede herhangi bir tuşa basıldığında ya da tuş serbest bırakıldığında keyevent oluşur. keyevent oluştuğunda bu sınıf, keylistener ile dinlenir ve keylistener ile dinlenen olay keypressed (tuşa basıldığında), keyreleased (basılan tuş bırakıldığında), keytyped (ekrana bir karakter yazılmak istendiğinde) gibi ilgili metoda yazılmalıdır. MouseEvent olayı: Fare / Mouse hareketi gerçekleştiğinde mouseevent olayı gerçekleşir. mouseevent oluştuğunda bu sınıf, mouselistener ile dinlenebilir ve mouselistener ile dinlenen olay mousepressed, mousereleased, mousecliked, mouseentered gibi ilgili metoda yazılan kod ile çalıştırılır. Örneğin fare ile çizim v.b. isler yapılacaksa o zaman fare tarafından tetiklenen olaylar ele alınabilir. MouseEvent nesnesinin getx ve gety metotları kullanılarak fare işaretcisinin bastığı yer bilgisi elde edilebilir. Örneğin kullanıcı bir fare tuşuna bastığında ve bıraktığında aşağıdaki MouseListener metotları tetiklenir. Tetiklenen olayların metotları ( ) aşağıdaki gibi tanımlanır: - public void mousepressed(mouseevent e) {; - public void mousereleased(mouseevent e) {; - public void mouseclicked(mouseevent e) {; - public void mouseentered(mouseevent e) {; - public void mouseexited(mouseevent e) {; Sayfa 16

17 Örnek Uygulamalar-x Örnek x: Butona basıldığında mesaj veren basit bir uygulama import java.awt.event.*; import javax.swing.japplet; import javax.swing.jbutton; import javax.swing.joptionpane; public class ButonMesaj extends JApplet implements ActionListener { JButton btn1=new JButton("Buton"); public void init() { btn1.addactionlistener(this); add(btn1); public void actionperformed(actionevent e) { JOptionPane.showMessageDialog(null,"Butona basıldı"); Örnek 1: Butona tıklandığında butonun başlığını(textini) değiştiren basit bir applet programı ve ekran çıktısı aşağıda görülmektedir. Çözüm: Dikkat ederseniz, bu uygulamada olay kaynağı buton (btn1) bileşenidir, olay kaynağını btn1.addactionlistener(this) deyimi ile dinliyoruz ve olay gerçekleştiğinde yapılacak işlemleri actionperformed(actionevent e) metoduna yazıyoruz. Buton nesnesini JButton btn1=new JButton("OFF"); komut satırı ile oluşturuyoruz. Butonu uygulama üzerine add(btn1); komut satırı ile ekliyoruz. Butonun başlığını gettext() metodu ile alıyoruz, settext metodu ile de değiştiriyoruz / yeni değere set ediyoruz. import java.awt.event.*; import javax.swing.japplet; import javax.swing.jbutton; public class Ornek1 extends JApplet implements ActionListener { JButton btn1=new JButton("OFF"); public void init() { btn1.addactionlistener(this); add(btn1); public void actionperformed(actionevent e) { String ad=btn1.gettext(); if(ad.equals("on")) btn1.settext("off"); else Öğr.Gör. Bülent btn1.settext("on"); ÇOBANOĞLU Sayfa 17

18 NOT: Uygulama için gerekli nesneler (Buton) ve butonu dinlemek içinde ActionListener (Olay Dinleyicisi) nesnesi eklenir. Bu ActionListener in da actionperformed() (Olay gerçekleşti) metoduna düğmeye basıldığında yapılacak gerekli işlemler yazılır. Örnek 2: Seçilen takım renklerine göre tuttuğunuz takımı söyleyen bir uygulamayı yazınız. { Programda renkler (Sarı, Kırmızı, Lacivert) 3 adet JCheckBox bileşeni ile gösterilecek ve seçilen renge göre takım konsol ekranına yazılacak Çözüm: import java.awt.flowlayout; import java.awt.event.*; import javax.swing.*; public class Test extends JFrame implements ActionListener { public static void main(string[] arg) { Test cerceve = new Test(); cerceve.setvisible(true); // Kapatma 'X' butonuna basıldığında çerçevenin kapanması için cerceve.setdefaultcloseoperation(jframe.exit_on_close); JCheckBox chk1; JCheckBox chk2; JCheckBox chk3; public Test() { setlayout(new FlowLayout()); chk1 = new JCheckBox("Sarı"); add(chk1); chk1.addactionlistener(this); chk2 = new JCheckBox("Kırmızı"); add(chk2); chk2.addactionlistener(this); chk3 = new JCheckBox("Lacivert"); add(chk3); chk3.addactionlistener(this); pack(); Sayfa 18

19 public void actionperformed(actionevent e) { if (chk1.isselected() & chk2.isselected()) System.out.println("Galatasaray"); if (chk1.isselected() & chk3.isselected()) System.out.println("Fener"); Programın ekran çıktısı aşağıdaki gibi olacaktır: Örnek 3: Tavlada zar atan ve atılan zarlara göre puan veren şekildeki gibi bir Applet uygulamasını yapınız. { Program, eğer atılan zarlardan biri 6 veya iki zarda birbirine eşit ise 2 değilse 1 puan verecek Çözüm: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Zar extends JApplet implements ActionListener { private JButton atbutonu; Sayfa 19

int sayac=0; private boolean atis = false; public void init() { atbutonu = new JButton("Zarı At"); add(atbutonu); atbutonu.addactionlistener(this); public void actionperformed(actionevent e) { atis = true; repaint(); public void paint(graphics g) { int zar1, zar2; if (atis) { zar1 = (int) (Math.random() * 6) + 1; zar2 = (int) (Math.random() * 6) + 1; g.drawstring("zarlar " + zar1 + " ve " + zar2, 20, 40); if (zar1 == zar2 zar1 == 6) { sayac+=2; SWING Uygulamaları-I 20 g.drawstring(sayac + " puan: "+ "\ndüşeeeş..tebrikler, şimdi 2 el oyna", 20, 60); else { g.drawstring(sayac + " puan: "+ "\niyisin iyisin.. devam et", 20, 60); sayac++; Örnek 4: Girilen not değerine göre ekranda geçtiniz veya kaldınız şeklinde mesaj veren Applet uygulamasını yapınız { Uygulamayı SWING yerine AWT bileşenleri ile gerçekleştiriniz. Çözüm: import java.awt.*; import java.applet.*; import java.awt.event.*; public class Not extends Applet implements ActionListener { TextField kutucuk; int not; public void init() { kutucuk = new TextField(10); add(kutucuk); kutucuk.addactionlistener(this); public void actionperformed(actionevent olay) { not = Integer.parseInt(kutucuk.getText()); repaint(); // paint metodunu yeniler Sayfa 20

21 public void paint(graphics g) { g.drawstring("notunuz : " + not, 50, 50); if (not!= 0) { if (not < 50) g.drawstring("kaldınız...", 50, 100); else g.drawstring("geçtiniz...", 50, 100); TextField elemanına girilen değerlere göre programın ekran çıktısı aşağıdaki gibi olur: Örnek 5. İki sayının toplamını şekildeki gibi gerçekleştiren bir java applet kodunu yazınız. Çözüm: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Ornek7 extends JApplet implements ActionListener { int Toplam = 0; JLabel lbl1 = new JLabel("Birinci Sayi"); // 1. satır GUI elemanları JTextField txt1 = new JTextField(); JLabel lbl2 = new JLabel("İkinci sayi"); // 2. satır GUI elemanları TextField txt2 = new TextField(); JButton btn1 = new JButton("Hesapla"); // 3. satır GUI elemanları JLabel lbl3 = new JLabel(); public void init() { // 3 satır, 2 sütundan oluşan bir ızgara(grid)tanımlandı setlayout(new GridLayout(3, 2)); add(lbl1);// Birinci satır GUI elemanları eklendi Sayfa 21

22 add(txt1); add(lbl2);// İkinci satır GUI elemanları eklendi add(txt2); add(btn1);// Ücüncü satır GUI elemanları eklendi add(lbl3); btn1.addactionlistener(this); public void actionperformed(actionevent evt) { int s1 = Integer.parseInt(txt1.getText()); int s2 = Integer.parseInt(txt2.getText()); Toplam = s1 + s2; lbl3.settext(integer.tostring(toplam)); Örnek 6. Şekildeki gibi (toplama, çıkarma, çarpma, bölme, üs alma) işlemlerini gerçekleştiren basit bir hesap makinesi applet uygulamasını yapınız. Çözüm: import java.applet.*; import java.awt.*; import java.awt.event.*; public class HesapMakinesi extends Applet implements ActionListener { private Button Topla; private Button Cikar; private Button Carp; private Button Bol; private Button Us; private Button Sil; private TextField kutu1; private TextField kutu2, kutu3; private Label etiket; private double sayi1; private double sayi2; private double sonuc = 0; public void init() { setlayout(new GridLayout(5, 2)); Topla = new Button("+"); Cikar = new Button("-"); Carp = new Button("*"); Bol = new Button("/"); Us = new Button("^"); Sil = new Button("CE"); kutu1 = new TextField(10); Sayfa 22

SWING Uygulamaları-I kutu2 = new TextField(10); kutu3 = new TextField(10); etiket = new Label(" = "); add(kutu1);// 1. satır add(kutu2); add(topla);// 2. satır add(cikar); add(carp);// 3.satır add(bol); add(us);// 4. satır add(sil); add(etiket);// 5. satır add(kutu3); // Global olarak tanımlanmış değişkene this deyimi ile erişiyoruz Topla.addActionListener(this); Cikar.addActionListener(this); Carp.addActionListener(this); Bol.addActionListener(this); Us.addActionListener(this); Sil.addActionListener(this); 23 public void actionperformed(actionevent e) { sayi1 = Double.parseDouble(kutu1.getText()); sayi2 = Double.parseDouble(kutu2.getText()); if (e.getsource() == Topla) sonuc = sayi1 + sayi2; if (e.getsource() == Cikar) sonuc = sayi1 - sayi2; if (e.getsource() == Carp) sonuc = sayi1 * sayi2; if (e.getsource() == Bol) sonuc = sayi1 / sayi2; if (e.getsource() == Us) sonuc = Math.pow(sayi1, sayi2); if (e.getsource() == Sil) { kutu1.settext(""); kutu2.settext(""); repaint();// paint metodunu yeniler public void paint(graphics g) { kutu3.settext("" + sonuc); Sıra Sizde Bir çerçeve içerisine her mouse (fare) tıklamasında sırası ile içi dolu kırmızı renkli kare, yeşil renkli daire ve siyah renkte Merhaba yazan programı yazınız. Sayfa 23

24 KAYNAKÇA Bülent Çobanoğlu, Java ile Programlama ve Veri Yapıları, 2. Baskı, ISBN:978-9944-711-10-4, Sayfa 5-21, 377-394 DEĞERLENDİRME SORULARI S1. Hareket bağımlı (olay tabanlı) bir uygulama üç bileşene sahiptir. Bunlar nelerdir? S2. Bir butona basıldığı zaman hangi olay gerçekleşir? S3. Bir Applet uygulamasında hareketleri (butona tıklanması, Mouse hareketi gibi) yakalamak için hangi paketinin program başında import edilmesi gerekir? S4. Bir çerçeve veya pano içerisine bir kontrol nesnesi (butonlar gibi) yerleştirildiğinde o nesnenin çerçevenin neresine ve hangi boyutlarda yerleştirileceğine hangi yöntem karar verir? Sayfa 24

KONUNUN ÖZETİ SWING Uygulamaları-I 25 Java nın ilk geliştirdiği GUI kütüphanesinin ismi AWT dir. Ancak Java 2 platformu ile birlikte AWT yetersiz görülmüş ve çok daha geniş ve gelişmiş özelliklere sahip SWING Kütüphanesi ( AWT ye göre yüzlerce yeni sınıfın eklendiği ) sisteme eklenmiştir. Swing bileşenleri, AWT bileşenleri ile aynı ismi taşırlar, tek fark J harfi ile başlamalarıdır (Button JButton, Label JLabel, CheckBox JCheckBox gibi ) diyebiliriz. Grafiksel kullanıcı ara yüzü oluşturmak ve uygulama geliştirmek için java.awt ve javax.swing olmak üzere iki temel bileşen kümesindeki paketler kullanılır. SWING bileşenlerinin hiyerarşik yapısındaki sınıfları açıklayacak olursak, en üst (top level) seviyede barındırıcı (container-konteyner) sınıflar bulunur. Konteynerler diğer bileşenleri içinde barındırabilen özel bileşenlerdir. Bu bileşenler JApplet, JDialog, JFrame, JWindow dur. Bir bileşeni java dilinde tanımlamak için aşağıdaki yapı kullanılır: Bileşen_adı değişken = new Bileşen_adi ( Başlık ); Örneğin Buton nesnesini eklemek için; JButton btn1=new JButton("Buton1"); Bir çerçeve veya pano içerisine bileşenler (butonlar, checkboxlar, vs ) yerleştirildiğinde o bileşenin çerçevenin neresine ve hangi boyutlarda yerleştirileceğine Yerleşim Planı Düzenleyicileri (Layout karar verir. Grafik uygulamalarında farklı layout yöneticileri kullanılabilir. Bunlardan bazıları; DEĞERLENDİRME SORULARI S1. Bir çerçeve veya pano içerisine bir kontrol nesnesi (butonlar gibi) yerleştirildiğinde o nesnenin çerçevenin neresine ve hangi boyutlarda yerleştirileceğine hangi yöntem karar verir? S2. Layout yönetimi çeşitleri nelerdir? İsimlerini yazınız. S3. Sırası ile şekildeki Swing bileşenlerinin eleman isimlerini söyleniz? Sayfa 25

S4. Javanın ilk geliştirdiği GUI kütüphanesinin ismi nedir? S5. SWING in AWT ye göre üstünlüklerini yazınız? SWING Uygulamaları-I 26 KAYNAKÇA Bülent Çobanoğlu, Java ile Programlama ve Veri Yapıları, 2. Baskı, ISBN:978-9944-711-10-4, Sayfa 5-21, 377-394 Sayfa 26