Java'da Swing ile Basit Bir Pencere Yapalım
O kadar java gördük belki birilerine bi faydamız dokunur. Haydi java’da swing kütüphanesinin ögelerini kullanarak basit bi pencere yapalım.
Bu yazıda, JFrame sınıfından birkaç method kullanmayı, JFrame
ile oluşturulan pencereye
JLabel ve JButton eklemeyi, JLabel
ögesinin font özelliklerini ayarlamayı ve JButton
ögesine
ActionListener objesini eklemeyi göreceğiz.
Layout olarak da BorderLayout objesinden biraz bahsedeceğim.
Çoğu swing objesini java apisinden öğrenmiş birisi olarak ilk tavsiyem yukarda verdiğim linklere de tıklayıp bi ne var ne yok bakmanız.
Önce kodlarımızı yazalım. Sonra konuşuruz üstünde.
package com.asosyalbebe.swing;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Pencere {
public static void main(String[] args) {
Pencere pencere = new Pencere();
}
public Pencere() {
JFrame pencere = new JFrame("Basit Bir Pencere Yapıyoruz");
pencere.setSize(300, 100);
pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pencere.getContentPane().setLayout(new BorderLayout());
JLabel metin = new JLabel("İlk penceremizi yaptık.");
metin.setFont(new Font("Serif", Font.BOLD, 25));
pencere.add("North", metin);
JButton buton = new JButton("Çıkış");
buton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(1);
}
});
pencere.add("South", buton);
pencere.setVisible(true);
}
}
İlk olarak import kısmından bahsedeyim. Bu kısımda sadece şu üç satırı yazarak da kurtulabilirdiniz:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Fakat hem neyin hangi paketin içinde olduğunu görmek açısından, hem de programın gereksiz import yapıp yavaşlamaması açısından bu şekilde daha faydalıymış, burada böyle yaptım. Yoksa ben de yıldızlı yöntemi kullanıyorum :)
Ana methoda(public static void main) bakacak olursak, içerisinde Pencere objesini çağırdığımızı görüyoruz.
Diğer elemanları neden main’in içinde değil de constructor’un içinde yarattığımın şu anda pek bir önemi yok,
fakat ileri düzeyde programlar yazmaya çalışırken böyle olması daha müsait oluyor diyelim,
main
methodun static
olması nedeniyle çeşitli yerlerde istenmedik problemler çıkıyor :)
Gelelim Pencere isimli sınıfımızın constructor’ına.
Burada ilk olarak bir pencere yaratmamız gerekiyor.
Bunu JFrame
nesnesi ile sağlıyoruz.
JFrame
nesnesini tanımlarken ona penceremizin başlık çubuğunda görüntülenecek olan
String
‘i parametre olarak gönderiyoruz.
Bu uygulamada başlık çubuğumuzda “Basit Bir Pencere Yapıyoruz” metni görünecek.
Daha sonra JFrame
nesnemize verdiğimiz ismi kullanarak onun özelliklerini tanımlıyoruz.
Ben pencere ismini vermiştim.
Öyle devam edelim.
Penceremizin boyutunu ayarlamak için JFrame
‘in bize sunduğu setSize methodunu kullanıyoruz.
Parametre olarak iki tane tamsayıyı sırasıyla genişlik ve yükseklik olarak giriyoruz.
pencere.setSize(int width, int height);
Penceremizin sağ üst köşesindeki çarpı tuşuna tıklandığında gerçekleşecek olan eylemi ayarlamak için JFrame
‘in
setDefaultCloseOperation methodunu kullanıyoruz.
Bu methoda parametre olarak JFrame.EXIT_ON_CLOSE
sabit değerini atadık.
Bu sayede çarpı butonuna tıklandığında program kapatılacak.
Bunu ayarlamayı unutursanız eğer, pencereniz kapatmaya çalıştığınızda kapanmak yerine gizlenir,
arkaplanda çalışmaya devam eder.
pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Şimdi geldik penceremize layout ayarlamaya.
Bunun için JFrame
‘in getContentPane() methodunu
kullanarak bize bir Container
nesnesi return etmesini sağlayacak, daha sonra da o
Container nesnesinin setLayout methodunu kullanıp ona bir layout atayacağız.
Ben burada BorderLayout kullandım.
BorderLayout
nedir diye merak edenler şuradan detaylı anlatımına bakabilir.
Ben kısaca bahsedecek olursam, efenim şimdi, BorderLayout
ekranı 5 parçaya böler.
Bu parçalara “North”, “South”, “Center”, “East”, ve “West” isimlerini verir.
BorderLayout ile şekillendirilmiş bir alana bir element ekleyeceğimiz zaman hangi alanına ekleyeceğimizi
parametre olarak belirtmemiz gerekir.
Şimdi penceremizi BorderLayout ile şekillendirelim bakalım.
pencere.getContentPane().setLayout(new BorderLayout());
Şimdi oluşturduğumuz penceremize bir yazı yazalım. Bunun için bir JLabel nesnesi yaratacağız ve yaratırken kullandığımız parametre onun içeriğindeki metin olacak.
JLabel metin = new JLabel("İlk penceremizi yaptık.");
Yarattığımız JLabel
nesnesini metin isimli değişkene verdiğimize göre, şimdi onun üzerinde bir iki oynama yapabiliriz.
Şimdi yazı tipiyle biraz oynamak istiyorum ben.
Bunun için Font nesnesini ve JLabel
nesnesinin setFont methodunu kullanacağız.
metin.setFont(new Font("Serif", Font.BOLD, 25));
JLabel
nesnemiz üzerindeki düzenlemelerimiz bittiğine göre, şimdi onu penceremize ekleyebiliriz.
Bunun için JFrame
içindeki add methodunu kullanacağız.
Ben bu JLabel
ögesini pencerenin üst kısmına eklemeyi uygun gördüm, siz değiştirebilirsiniz tabi ki :)
pencere.add("North", metin);
Şimdi bir buton oluşturalım ve üzerinde çıkış yazsın.
Tıklanıldığı zaman da program kapansın.
Gelişmiş butonlar oluşturabilmemiz için swing kütüphanemiz bize JButton nesnesini sunar.
Bir JButton
nesnesi yaratırken kullandığımız parametre onun üzerindeki metni belirler.
Şimdi üzerinde çıkış yazan bir JButton
nesnesi yaratıp onu buton isimli değişkenimize verelim.
JButton buton = new JButton("Çıkış");
Şimdi bu butonumuza addActionListener methodunu ve ActionListener
sınıfını kullanarak bir dinleyici ekleyelim.
ActionListener
methodundaki actionPerformed methodu, bir action gerçekleştiği zaman bir
ActionEvent parametresi ile çağırılır.
Biz de actionPerformed
methodunun içerisine butona tıklandığında gerçekleşecek olan eylemleri kodlayacağız.
Ben burada System.exit(1);
komutu ile programı kapatmayı tercih ettim, basit bir şey olsun diye.
buton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(1);
}
});
Butonumuzu da ayarladığımıza göre, onu da penceremize ekleyebiliriz. Yine aynı işlem, fakat bunu pencerenin aşağı kısmına ekliyoruz.
pencere.add("South", buton);
Ve en son olarak da penceremizin görünür olması için JFrame
nesnesinin
setVisible methodunu kullanacağız.
Bunu penceremize bütün eklemeleri yaptıktan sonra çalıştırmamızda fayda varmış.
Hiç çalıştırmazsak da penceremiz görünmüyor.
pencere.setVisible(true);
Penceremizin son halini de koyalım buraya tam olsun:
Bu yazının sonuna geldik. Umarım faydalı bir iş çıkarmışımdır swing’e yeni başlayanlar için. Başka bir yazıda görüşmek üzere, yorumlarınızı beklerim :)