SWING İle GRAFİKSEL UYGULAMALAR-I

advertisement
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,
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
SWING Uygulamaları-I
İç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ı
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 2
2
SWING Uygulamaları-I
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.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 3
3
SWING Uygulamaları-I
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ı.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 4
4
SWING Uygulamaları-I
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.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 5
5
SWING Uygulamaları-I
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
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 6
6
SWING Uygulamaları-I
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
2.
BorderLayout Bileşenler 5 alana yerleştirilir; Doğu, Batı, Güney, Kuzey ve Merkez olmak üzere.
3.
GridLayout
4.
GridBagLayout : GridLayout’un daha gelişmiş şeklidir, bir bileşen ızgara üzerinde birden fazla
5.
6.
7.
// Bileşenler, çerçeveye satır satır ve soldan sağa doğru yerleştirilir .
Bileşenler, Excel tablosuna benzer şekilde ızgaralara yerleştirilir.
hücreye yerleştirilebilir.
CardLayout
: Bileşenler, iskambil destesinde olduğu gibi üst üste yerleştirilir. Bir anda sadece biri
gözükür.
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.
GroupLayout : Bileşenleri hiyerarşik bir şekilde sıralı ya da paralel olarak gruplar.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 7
7
SWING Uygulamaları-I
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 );
}
}
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 8
8
SWING Uygulamaları-I
Ö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.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 9
9
SWING Uygulamaları-I 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
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 10
SWING Uygulamaları-I 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
import
import
public
java.awt.*;
javax.swing.JApplet;
javax.swing.JOptionPane;
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);
}
}
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 11
SWING Uygulamaları-I 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.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 12
SWING İle GRAFİKSEL
SWING Uygulamaları-I 13
UYGULAMALAR-II
Hedefler
Bu üniteyi çalıştıktan sonra;
Java olaylarını ve dinleyici metotlarını öğreneceksiniz,
Hareket bağımlı uygulamalar geliştirebileceksiniz,
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 13
SWING Uygulamaları-I 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ı
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 14
SWING Uygulamaları-I 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) { … }”
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 15
SWING Uygulamaları-I 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
public
public
public
public
void
void
void
void
void
mousePressed(MouseEvent e) {};
mouseReleased(MouseEvent e) {};
mouseClicked(MouseEvent e) {};
mouseEntered(MouseEvent e) {};
mouseExited(MouseEvent e) {};
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 16
SWING Uygulamaları-I 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
btn1.setText("ON");
Öğr.Gör. Bülent
ÇOBANOĞLU
}
}
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 17
SWING Uygulamaları-I 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();
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 18
SWING Uygulamaları-I 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;
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 19
SWING Uygulamaları-I 20
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;
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
import
import
public
java.awt.*;
java.applet.*;
java.awt.event.*;
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
}
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 20
SWING Uygulamaları-I 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
import
import
public
java.awt.*;
java.awt.event.*;
javax.swing.*;
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
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 21
SWING Uygulamaları-I 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
import
import
public
{
java.applet.*;
java.awt.*;
java.awt.event.*;
class HesapMakinesi extends Applet implements ActionListener
private
private
private
private
private
private
private
private
private
private
private
private
Button Topla;
Button Cikar;
Button Carp;
Button Bol;
Button Us;
Button Sil;
TextField kutu1;
TextField kutu2, kutu3;
Label etiket;
double sayi1;
double sayi2;
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);
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 22
SWING Uygulamaları-I 23
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);
}
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.
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 23
SWING Uygulamaları-I 24
KAYNAKÇA
“Bülent Çobanoğlu”, Java ile Programlama ve Veri Yapıları, 2. Baskı, ISBN:978-9944-711-10-4, Sayfa 521, 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?
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 24
SWING Uygulamaları-I 25
KONUNUN ÖZETİ
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?
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 25
SWING Uygulamaları-I 26
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?
KAYNAKÇA
“Bülent Çobanoğlu”, Java ile Programlama ve Veri Yapıları, 2. Baskı, ISBN:978-9944-711-10-4, Sayfa 521, 377-394
Öğr.Gör. Bülent ÇOBANOĞLU
Yrd. Doç.Dr. Ahmet ZENGİN
Sayfa 26
Download