Translated from Sawitch Chapter 13 by Dr. Galip AYDIN
-
Upload
reuben-waller -
Category
Documents
-
view
36 -
download
4
description
Transcript of Translated from Sawitch Chapter 13 by Dr. Galip AYDIN
Translated from Sawitch Chapter 13 by Dr. Galip AYDIN
Swing Nesneleri ile Pencere arabirimleri oluşturulması
Java programlarının pencereler olarak çalışmasını sağlayan kütüphane
Java Foundation Classes veya JFC sınıflarının bir parçası
Abstract Window Toolkit (AWT) kütüphanelerinin yeni versiyonu
Java 2 (JDK 1.2) versiyonundan sonra standart
Modern programların büyük kısmı grafiksel kullanıcı arabirimi (GUI) kullanır
GUI: Graphical—sadece yazı veya karakterler değil:
pencereler, menüler, butonlar, vs. User—programı kullanan kişi Interface—programla etkileşimi sağlar
Tipik grafiksel elemanlar: Pencere—Ekranın program için kullanılan daha
küçük bir kısmı Menü—Kullanıcıya programla ilgili sunulan
alternatifler Button—Tıklanabilecek butonlar
GUI kullanan programlar sıklıkla olay-kontrollü programlama kullanırlar
Program bir olayın olmasını bekler ve buna göre bir cevap verir.
Olay örnekleri: Fare butonuna tıklanması Farenin hareket edilmesi Klavyede bir tuşa basılması
Firing an event—Nesneler bir olay oluşturduğunda Listener—Olayın olmasını bekleyen nesne Event handler—Olaylara cevap veren metod
Önceki programlama yöntemi:
Komutlar sırayla yürütülür Sonraki olacak şey
listedeki sonraki komuttur Program bir sorumlu
tarafından yürütülür: Bilgisayar
Olay kontrollü Programlama yöntemi:
Olay oluşturan ve olaylara tepki veren nesneler
Bir sonra olacak şey bir sonraki olaya bağlıdır
Program kullanıcıyla bilgisayar arasındaki etkileşimdir
import javax.swing.*;public class SwingDemo{ public static final int EN = 300; public static final int YUKSEKLIK = 200;
public static void main(String[] args) { JFrame pencerem = new JFrame(); pencerem.setSize(EN, YUKSEKLIK); JLabel etiket = new JLabel(“Tıklama...”); pencerem.getContentPane().add(etiket);
WindowDestroyer dinleyici = new WindowDestroyer(); pencerem.addWindowListener(dinleyici);
pencerem.setVisible(true); }}
import javax.swing.*;public class SwingDemo{ public static final int EN = 300; public static final int YUKSEKLIK = 200;
public static void main(String[] args) { JFrame pencerem = new JFrame(); pencerem.setSize(EN, YUKSEKLIK); JLabel etiket = new JLabel(“Please don’t…”); pencerem.getContentPane().add(etiket);
WindowDestroyer dinleyici = new WindowDestroyer(); pencerem.addWindowListener(dinleyici);
pencerem.setVisible(true); }}
Bütün Swing programlarında kullanılır
pencerem adında bir JFrame penceresi oluşturur
JFrame penceresine bir etiket ekler (getContentPane)
import javax.swing.*;public class SwingDemo{ public static final int EN = 300; public static final int YUKSEKLIK = 200;
public static void main(String[] args) { JFrame pencerem = new JFrame(); pencerem.setSize(EN, YUKSEKLIK); JLabel etiket = new JLabel(“Please don’t…”); pencerem.getContentPanel().add(etiket);
WindowDestroyer dinleyici = new WindowDestroyer(); pencerem.addWindowListener(dinleyici);
pencerem.setVisible(true); }}
Kapatma (x) butonuna tıklanması olayını yakalar
WindowDestroyer programcının tanımladığı başka bir class.
public class WindowDestroyer extends WindowAdapter{ public void windowClosing(WindowEvent e) { System.exit(0); }}
WindowAdapter bütün pencere olaylarını yakalamaya yarayan bir class. Pencere kapatma olayı
oluştuğunda bu metod çağrılır.
import javax.swing.*;public class SwingDemo{ public static final int EN = 300; public static final int YUKSEKLIK = 200;
public static void main(String[] args) { JFrame pencerem = new JFrame(); pencerem.setSize(EN, YUKSEKLIK); JLabel etiket = new JLabel(“Please don’t…”); pencerem.getContentPanel().add(etiket);
WindowDestroyer dinleyici = new WindowDestroyer(); pencerem.addWindowListener(dinleyici);
pencerem.setVisible(true); }}
Pencere bu satır olmadan görünmez.
Yedi farklı metod vardır Herbir metod pencere kapatma gibi bir pencere
eylemiyle ilişkilidir WindowAdapter sınıfındaki bütün metodları miras
alabilir, bazılarını değiştirebilirsiniz WindowDestroyer (Demo Program) WindowAdapter sınıfından türetilmiştir windowClosing metodunu değiştirmiştir.
Pencere için farklı bir sınıf IlkPencere sınıfıJFrame sınıfından türetilmiştir main metodu IlkPencere sınıfının iki nesnesini
oluşturuyor Herbir pencerenin kendi dinleyicisi var Herbir pencerenin main metodu setVisible
metodunu çağırıyor
import javax.swing.*;public class IlkPencere extends JFrame{ public static final int EN = 300; public static final int YUKSEKLIK = 200;
public IlkPencere() { super(); setSize(EN, YUKSEKLIK); JLabel etiket = new JLabel(“Please don’t…”); getContentPane().add(etiket);
WindowDestroyer dinleyici = new WindowDestroyer(); addWindowListener(dinleyici); }}
Jframe sınıfından türetilmiş
Temel sınıfın kurucu metodunu çağırıyor
setSize, getContentPane, ve addWindowListener metodları Jframe sınıfından miras alınıyor
JFrame(String başlık)Verilen başlığı taşıyan bir çerçeve
oluşturan Jframe kurucu metodu Container getContentPane()
Jframe nesnesinin konteyner nesnesini döndürür, bileşenleri eklemek için kullanılır
void setBackgroundColor(Color c) void setForegroundColor(Color c) void setSize(int EN, int yukseklik)
void setVisible(boolean b) void show()
Yerleşim Yöneticisi—bir konteyner üzerinde nesnelerin nasıl sıralanacağına karar veren nesne
Konteynerlar boyut değiştirebildikleri için kullanılırlar BorderLayout FlowLayout GridLayout
Herbir yöneticinin konteynerin boyutu veya şekli değiştiğinde nesneleri yeniden nasıl düzenleyeceği ile ilgili kuralları vardır.
Herbirisine bir bileşen konabilecek 5 bölge tanımlanmıştır:
BorderLayout.NORTH
BorderLayout.SOUTH
BorderLayout.CENTERBorderLayout.WEST
BorderLayout.EAST
content.setLayout(new BorderLayout());. . .content.add(label1, BorderLayout.NORTH);
Konteyner büyüdüğünde veya küçüldüğünde en fazla CENTER bölgesi büyür veya küçülür.
En basit yerleşim yöneticisidirKonteynera eklenen bileşenleri
eklenme sırasına göre soldan sağa doğru yerleştirir.
Add metodu eklenecek bileşeni parametre olarak alırContainer content = getContentPane();
content.setLayout(new FlowLayout());JLabel label1 = new JLabel(“First label here”);content.add(label1);JLabel label2 = new JLabel(“Second label there”);content.add(label2);
Belirli sayıda satır veya sütün tesbit edilir
Izgaradaki bütün bölgeler eşit boyuttadır
Konteyner boyut değiştirince herbir bölge eşit miktarda büyür veya küçülür İki satır üç sütündan
oluşan bir ızgara oluşturur
aContainer.setLayout(new GridLayout(2, 3));. . .aContainer.add(label1);aContainer.add(label2);
Satırlar sütünlardan önce doldurulur
Swingde buton kullanmak için izlenecek temel adımlar:
Buton nesnesi oluştur Buton nesnesini konteynera ekle actionPerformed metodu olan bir ActionListener nesnesi oluştur
Listener nesnesini butona kaydet
JButton stopButton = new JButton(“Red”);
contentPane.add(stopButton);
Butonun üstünde çıkacak yazı
Butonu konteynera ekleme
JButton butonlar için Swingin tanımladığı bir sınıftır class for buttons.
Sınıfa ActionListener özelliği eklemek için: Sınıf tanımlamasına implements ActionListener ifadesi eklenir:
actionPerformed adında bir metod yazılır
public class ButtonDemo extends JFrame implements ActionListener{ . . .
public void actionPerformed(ActionEvent e) { . . .
actionPerformed metodunun sadece bir parametresi vardır
Parametre ActionEvent tipindedir
public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals(“Red”)) . . .}
Eğer bir buton ile bir Listener ilişkilendirilmemişse butona tıklanıp tıklanmadığı kontrol edilemez.
Buton için bir Listener kaydetme:
JButton stopButton = new JButton(“Red”);stopButton.addActionListener(this);contentPane.add(stopButton);
this parametresi bu kodu barındıran sınıfı gösterir. Bu örnekte sınıfımız ActionListener sınıfını implement eden JFrame sınıfıdır.
Container sınıfı kendisine bileşenler eklenebilen bir sınıftır.
Her Swing container sınıfının bir add metodu vardır.Bazı çok kullanılan Container sınıflar: JPanel Container JFrame’in Content pane nesnesi
Red Green
GUIlerin hiyerarşik organizasyonu için kullanılır: Bir panel başka bileşenleri içerebilir Bir panel başka bir Container nesnesine
eklenebilir.JPanel buttonPanel = new JPanel();buttonPanel.setLayout(new FlowLayout());buttonPanel.add(stopButton);buttonPanel.add(goButton);contentPane.add(buttonPanel, BorderLayout.SOUTH);
Container sınıfından türetilmiş herhangi bir sınıfa bileşenler eklenebilir.
Container sınıfı kullanılırken AWT kütüphanesini import etmek gerekir:import java.awt.*;
Jcomponent, Container sınıfından türetilmiştir Container üstündeki bileşenler container layout
manager tarafından düzenlenir.
Bileşenler direkt olarak Jframe üzerine değil Jframe’in content pane bileşenine eklenirler.
getContentPane metodu Container olarak davranan content pane bileşenine bir referans döndürür, Container contentPane = getContentPane();
JLabel label = new JLabel(“blue”);contentPane.add(label);
Component
Object
Container
Window
Frame
JFrame JComponent
JPanel
JLabel JMenuBar
AbstractButton
JButton
JMenu
JMenuItem
JTextFieldJTextArea
JTextComponent
AWT
Swing
Sınıf
Soyut Sınıf
Layout manager sınıfları AWT içindedir.
Text field ve text area bileşenleri getText metodu bir bileşendeki yazıyı
döndürür setText bileşendeki yazıyı değiştirir
JTextFieldJTextArea
JTextComponent
memo1 = theText.getText();
theText.setText(“Hi Mom”);
JTextComponent sınıfından türetilmişlerdirsetText ve getText metodları vardır Kurucu metodlarına başlangıçta
taşıyacakları yazı parametre olarak gönderilebilir.
JTextField sadece bir satır yazı taşıyabilirJTextArea birçok satır taşıyabilirJTextArea scroll bar (aşağı-yukarı taşıma
çubukları) taşıyabilir.JTextField someText = new JTextField(40);
JTextArea someMoreText = new JTextArea(10, 40);
Bir TextArea veya TextField’dan int almak için:
getText kullanarak String altrim ile boşlukları atString’i int’e çevirmek için parseInt
metodunu kullanint n = Integer.parseInt (field.getText().trim());