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:

java swing window frame

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 :)