Java’da GUI Kütüphanesi

22. Java GUI Kütüphanesi

22.1 SWT GUI Kütüphanesi

Java programlama dili için bir başka GUI kütüphanesi daha vardır ve SWT(The Standard widget toolkit) olarak adlandırılır. SWT kütüphanesi ilk olarak IBM tarafından geliştirilmeye başlanmıştır. Şimdilerde IBM’in desteklediği açık kaynak kodlu bir projedir. SWT ağırsiklet araçların bir örneğidir. Altta çalışan işletim sisteminin GUI yaratmasına izin verir. SWT; çalışmak için yerel java arayüzünü kullanır. SWT’nin ana avantajları sürat, alışılmış görünüm ve hissiyattır. Swing kadar güçlü değildir ve işletim sisteminin kütüphanesi bağımlıdır.

22.2 SWING GUI Kütüphanesi

Swing kütüphanesi Sun Microsystems tarafından piyasaya sürülen resmi Java GUI aracıdır. Swing; %100 java ile yazılmıştır ve Java Foundation Classes(JFC) nin bir parçasıdır. Tam donanımlı masaüstü uygulamaları geliştirmek için kullanılan paketler bütünüdür. JFC; AWT ,Swing ,Ulaşılabilirlik,Java 2D ve Sürükle Bıraktan oluşur. 1997 yılında JDK 1.2 ile birlikte piyasaya sürülmüştür.

22.3 İlk Swing Programı

Bu bölümde, Swing kullanarak ilk programımızı oluşturacağız.Örnekler çok basit olacak. Örnek fonksyonellikleri inceleyeceğiz.

İlk örnekte basit bir pencere yaratacağız.

Alternative 1:  JFrame’in Genişletilmesi

Alternative 2:  JFrame Sınıfının Kullanılması

22.3 JFrame

J ile başlayan bileşenlerin Swing isimlendirme kurallarına uyduğu Frame nesnesine JFrame denir.(JButton, JLabel)

JFrame ‘Yüksek-Seviye’ taşıyıcı olarak adlandırılır, yani JFrame görüntülenmek için kendini başka bir nesneye ekleme gereksinimi duymaz.

İçerik bölme; bütün text, buton ve grafiklerin konulduğu yerdir. bu öğreticilerde İçerik bölmesiyle çalışacağız.

Bu örnekte gördüğünüz üzere jframe birkaç bileşenden oluşur. görüntü bileşenlerini eklemek için, içerik bölmesinde koyacağımız yerleri belirlemeliyiz.

İçerik bölmesi; kapsama hiyerarşisinde en üst sıradadır. kapsama hiyerarşisi kök dizin olarak üst sıra taşıyıcısını(bu durumda jframe) alan bileşenlerin oluşturduğu bir ağaç gibidir. aşağı doğru indikçe, bileşenleri tutmak için jpanel gibi diğer taşıyıcıları kullanırız.

22.4 SwingUtilities.invokeLater()

invokelater() metodu uygulamayı swing olay sırası(swing event queue)’na sokar.gui’nin belirli durumlarda takılmasını engellemek için kullanılır.bu konu daha sonraki konulardan biridir ve şimdi bunu düşünmemeliyiz.

 

Örnek:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example extends JFrame {
        public Example() {
          setTitle("Simple example");
          setSize(300, 200);
          setLocationRelativeTo(null);
          setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
		
        public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
               public void run() {
			   
                    Example ex = new Example();
                    ex.setVisible(true);
               }
           });
        }
}

Kod kısa olmasına rağmen uygulama ekranı çok iş yapabilir. Yeniden boyutlandırılabilir, tam ekran yapılabilir veya minimize edilebilir. Bütün karmaşıklık programcının uygulamasında saklıdır.

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

Swing sınıfları şu şekilde içe aktarılır.

public class Example extends JFrame {

Example sınıfı JFrame bileşenlerinden miras alır. JFrame üst seviye taşıyıcıdır ve
diğer bileşenleri tutmak için kullanılır.

setTitle("Simple example");

Burada pencerenin boytunu setTitle() metodunu kullanarak ayarladık.

setSize(300, 200);

Bu kod pencereyi 300px genişliğinde 200px uzunluğunda ayarlayacaktır.

setLocationRelativeTo(null);

Pencerenin ortasında bu satır olacaktır.

setDefaultCloseOperation(EXIT_ON_CLOSE);

Bu metod, sağ üstteki kapatma ikonuna basıldığında pencereyi kapatacaktır. Ön tanımlı ayarında hiç birşey yapmayacaktır.

SwingUtilities.invokeLater(new Runnable() {
     public void run() {
          Example ex = new Example();
          ex.setVisible(true);
     }
});

Kodumuzun bir örneğini alalım ve ekranda gösterelim.

22.5 JButton

Bir sonraki örneğimizde bir butonumuz olacaktır. Butona seçtiğimizde uygulama kapanacaktır.


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Example extends JFrame {
    // constructor
    public Example() {
    initUI();
    }
	// initialize GUI components
	public final void initUI() {
	    JPanel panel = new JPanel();
		getContentPane().add(panel);
		panel.setLayout(null);
		JButton quitButton = new JButton("Quit");
		quitButton.setBounds(50, 60, 80, 30);
		//Button Event
		quitButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent event) {
			System.exit(0);
			
		   }
		});
		panel.add(quitButton);
		setTitle("Quit button");
		setSize(300, 200);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	// main method
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Example ex = new Example();
				ex.setVisible(true);
			}
		});
	}
}

JButton’u pencereye yerleştirdik. Buraya bir action listener ekleyeceğiz.

public Example() {
initUI();
}

Bu ,GUI’yi metodun içinde yaratan iyi bir programlama uygulamasıdır

JPanel panel = new JPanel();
getContentPane().add(panel);

Jpanel bileşeni oluşturalım. Bu üretken hafif bir taşıyıcıdır. JFrame’i Jpanel’e
ekleyelim

panel.setLayout(null);

Normal olarak Jpanel FlowLayout yöneticisine sahiptir. Bu görünüm yöneticisi bileşenleri taşıyıcılara yerleştirmek için kullanılır. Eğer setLayout(null) metodunu çağırırsak kendimiz bileşenleri yerleştirebiliriz. Bunun için setBounds() metodu kullanılır

Burada bir buton yaratıyoruz. setBounds() metodunu çağırarak yerini ayarlıyoruz ve sonra bir action listener ekliyoruz. Butonu seçtiğimizde action listener çalışacaktır. Bu durumda butonu işaretlediğimizde uygulama kapanacaktır

Quit butonunu göstermek için panele mutlaka eklemeliyiz.

22.6 Tooltip

Tooltip’ler yardım sisteminin birer parçalarıdır. Eğer fare imlecini bir objenin üstüne getirirsek Swing bunu dikdörtgen bir pencerede gösterir.

Bu örnekte frame ve buton için tooltip ayarlıyoruz.

Tooltip’I etkinleştirmek için setTooltipText() metodunu çağırıyoruz.

22.7 JLabel Bileşeni

JLabel yazı ve resim göstermek için kullanılan basit bir bileşendir. Girdi olaylarıyla etkileşim kurmaz.

Bu örnekte Cardigans’ın No Sleep Song isimli şarkısının sözlerini göstereceğiz.
JLabel bileşeninde HTML tagleri kullanılabilir. Satırları ayırmak için <br> kullanılır.

BorderLayout kullanmak için bir panel yaratıyoruz.

 Burada bir label bileşeni oluşturuyoruz. Fontunu Georgia,14 px olarak ayarlıyoruz. Ön rengini de değiştiriyoruz.

Label’ı panelin merkezine koyuyoruz.

Panel frame bileşenine eklendi. Bütün bileşenlerin görünebilmesi ve pencerenin boyutunun değiştirilebilmesi için metodunu pack() çağırıyoruz

22.8 JCheckBox Bileşeni

JCheckBox iki durumu olan bir bileşendir. Bu durumlar Açık ve kapalı dır. İsmi olan bir kutudur. Eğer kutu işaretlenmişse, içinde bir tick(✔) ile gösterilir. Bir check box göster/gizle gibi durumlarda kullanılabilir.

Örneğimizde duruma göre pencere belirir veya saklanır

Burada checkbox için bir constructor metodumuz var. Yazıyı ve durumu sağlıyoruz.

Checkbox’un durum seçimi olduğunu biliyoruz. Checkbox’un durumuna bağlı olarak
pencereyi gösterebilir veya gizleyebiliriz

22.9 JSlider

JSlider kullanıcının belirli bir aralıkta sürükleme çubuğunu kaydırarak bir değere ulaşmasını sağlar.Aşağıdaki örnek, ses kontrolünü göstermektedir.

Bu örnekte; JSliderve JLabel gösterdik. Sürükleme çubuğunu kaydırarak, label bileşenindeki yazıyı değiştirebiliriz.

Panelin etrafına 40px’lik bir çerçeve koyduk.

JSlider’ın anormal boyutlara ulaşmasını engellemek için sağa ve sola ayarlanabilir boşluklar bıraktık.

Bu JSlider constructor’udur. Parametreleri; minimum,maximum ve şu andaki değerdir.

Sürgüye ChangeListener ekliyoruz. Listener’ın içinde sürgü değerini ve yazıyı ayarlyoruz.


22.10 JComboBox

Combobox butonu, alanı veya drop-down list bileşenlerini kombine eder. Kullanıcı isteğine göre drop-down list’ten değerini seçebilir. Eğer combobox değiştirilebilir yapılırsa, kullanıcının içine veri girebileceği bir alan oluşur.

Örneğimizde iki tane bileşen var. Label ve combobox. Combobox’un içinde 3 tane ünlü roman yazarı var. İsmi seçtiğimizde; resmi label’in içinde belirecek.

Gösterilecek alan basit bir JLabel’dir.

Combobox’a ItemListener ekliyoruz.Event handler’da combobox’da seçilmiş indexi ve label için uygun resmi alıyoruz. Seçilen isim; görüntülerin olduğu bir dizinin de indexidir.

 22.11 JToggleButton

JToggleButton bir butondur ve iki durumu vardir.Basıldı veya basılmadı. Butona basarak bu durumu değiştirebilirsiniz. Bu fonksiyonelliğin kullanıldığı durumlar mevcuttur.

Resim

Resim

Ornekte bir panel ve üç tane buton vardır.Panelin arka plan rengini siyaha ayarlayacağız.Butonlar renk degerlerinin kırmızı mavi ve yeşil olanlarını tetikleyecek.

Basilan butona gore arkaplan rengi degisecek

Resim

actionPerformed metodunda o andaki kırmızı mavi ve yeşil rengi algılıyoruz

Resim

Hangi butona basıldığını ve o anki renk durumunu elde ediyoruz.

Resim

Burada yeni bir renk olusturuldu ve görüntü paneli o renkte görünmekte

Resim