28 Şubat 2010 Pazar

Neden Swing

Java Swing'e neden ihtiyaç duydu ve Swing bize neler sağladı.

Javanın 1.0 sürümünde Kullanıcı Grafik Arayüzü (GUI) olarak AWT (Soyut Pencereler Araç Kiti - Abstract Windows Toolkit) vardı. AWT mantığı Javanın çalıştığı platformda desteklenen GUI'ler için javada bir eş yaratılmasından ibaretti. Yani siz bir düğme oluşturduğunuzda bu düğme hangi platformadaysanız o platformun doğal kodundan (native code) türetiliyordu.

Bu yaklaşımın bir kaç sakıncası vardı. Bunlardan bir tanesi sunulan bileşenlerin (component) çeşitliliği Javanın üzerinde çalıştığı platform ile sınırlıydı. Java bir kere yaz her yerde çalıştır ilkesiyle ters düşmemek için yanlızca bütün platformlarda desteklenen bileşenleri sunabiliyordu.

Bir başka sakınca ise davranış ve görünümün (Look And Feel) aynı olmamasıydı. Bir bileşen Windows da farklı MacOS da farklı gözüküyor ve farklı davranıyordu. Programcılar bu farklılıkları değerlendirmek zorundaydı. Bu sıkıntılardan yola çıkarak Java Swing'i yarattı.

Swing tüm platformlarda aynı şekilde davranacak ve aynı gözükecekti. Üstelik Swing yeni bileşenlerin oluşturulmasını, hali hazırdakilerin değiştirilmesini ve görünüşlerinin çalıştıkları platformu yansıtacak veya Javanın kendine ait görünümünde olmasını destekleyecek şekilde geliştirilecekti.

Geliştiriciler Swing'i oldukça kullanışlı ve gelişmiş buldular. Zamanla Swing genişledi ve dev bir kütüphane oldu. Swing çekirdek API ile yani JRE ve JDK ile geliyor ve ayrı bir kuruluma gerek kalmıyor.

Swing teknolojisi AWT paketinin Container Sınfını genişleten JComponent ile hayat bulur. JComponent üzerine Swing bileşenlerinin Java2D API'leri kullanarak çizim yaptığı çok sayıda özellik ve metot barındıran dev bir sınıftır.

Aslında Swing teknolijisi MVC (Model Görünüm Kontrolcü - Model View Controler) teknolojisine dayanır. MVC ilk olarak Smalltalk Programlama dilinde kullanılmış bir yaklaşımdır. MVC bir bileşeni  3 sorumluluğu yerine getirecek 3 parçaya ayırır. Bu parçalar:
  1. Model : Bileşenin ilgileneceği veri modelini tarif edecek sınıf
  2. View (Görünüm) : Bileşenin veriyi ifade edecek şekilde görüntülenmesini sağlayacak sınıfı ifade eder.
  3. Controller (Kontrolcü): Bileşenle etkileşime girimesi sonucu oluşan olayları ele alan sınıfı ifade eder.
Örneğin JButton sınıfı  bir buttonun davranışını ve modelini uygular. ButtonUI sınıfı ise JButton sınıfının görünüşünü uygular.

Bazı Swing bileşenleri pek çok sınıf ile desteklenmiştir ve bunlar ayrı paketlerde yer alır. Yeri gelmişken Swing paketlerine bakalım:
  1. javax.swing (Birçok bileşen ve destek sınıfları barındırır.)
  2. javax.swing.border (Bileşenlerin çevrelerine çerçeveler oluşturan sınıfları barındırır.)
  3. javax.swing.colorchooser (Renk seçim kutusunu destekleyen sınıfları barındırır.)
  4. javax.swing.event (Swing bileşenleri için özel olayları yöneten sınıfları barındırır.)
  5. javax.swing.filechooser (Dosya iletişim kutusunu destekleyen sınıfları barındırır.)
  6. javax.swing.plaf (Platforma bağlı görünümler oluşturmak için gereken destek sınıfları barındırır.)
  7. javax.swing.plaf.basic (Platforma bağlı görünümler oluşturmak için gereken destek sınıfları barındırır.)
  8. javax.swing.plaf.metal  (Metal temalı görünüm oluşturmak için gereken destek sınıfları barındırır.)
  9. javax.swing.plaf.multi (Farklı temadaki bileşenleri karıştırmak için gereken destek sınıfları barındırır.)
  10. javax.swing.plaf.synth (Sentetik tema oluşturmak için sınıflar barındırır.)
  11. javax.swing.table (Tablolar oluşturmak ve yönetmek için gereken destek sınıfları barındırır.)
  12. javax.swing.text (Text bileşenlerini için destek sınıf barındırır. Text bileşenleri HTML yada RTF tipi textleri görüntüleyebilir.)
  13. javax.swing.text.html (HTML tipi text bileşenleri için destek sınıfları barındırır.)
  14. javax.swing.text.html.parser (HTML ayrıştırıcı sınıfları barındırır.)
  15. javax.swing.text.rtf (RTF (Zengin Yazı Formatı -Rich Text Format) için destek sınıfları barındırır.)
  16. javax.swing.tree (Ağaç listeleri bileşenleri için destek sınıfları barındırır.)
  17. javax.swing.undo (Bir programda yapılan işlemleri geri almak ve/veya tekrar uygulamak için gereken sınıfları barındırır.)
javax.swing paketi oldukça büyük bir pakettir ve bileşenlerin çoğu bu pakettedir. Ayrıca sıkca kullanacağımız pek çok yararlı sınıfıda barındırır. Diğer paketler javax.swing paketindeki bileşenleri desteklemek amacı ile yada görünüm v.s. gibi diğer destekler için oluşturulmuştur.

Bu yazıma burada son vermeyi düşündüm. Ancak Swing ile ilgili birçok yazı yayınlayacağım. Şimdilik yayınlaması düşündüğüm bazı konular şöyle:
  • Swing bileşenlerini oluşturmak: Klasik bir button nasıl oluşturulur v.s.
  • Swing bileşenlerini değiştirmek: Tablo veri modeli nasıl değiştirlir. Hücre boyama v.s.
  • Yeni bileşenler yaratmak: JPanel kullanarak yeni bir bileşen oluşturmak yada JButtonu değiştirerek bileşenlerin görünümü ile oynamak
  • Bileşenler ile ilgili örnek kodlar: Tablo sütün sıralama filtreleme v.s.
  • Özel sınıflar: Swing'i desteklemek amaçlı yazılmış sınıflar (Swing worker v.s)
  • Olay yönetimi v.s
  • Tabiki arada kafama göre bir kaç konu.

    3 yorum:

    1. az ve öz olmuş, elinize sağlık.

      YanıtlaSil
    2. paylasiminiz icin tesekkur ederim :)

      YanıtlaSil
    3. swinge neden ihtiyaç duyarız ve swing nedir ? çok kısa bir tanım yapabilir misiniz ?

      YanıtlaSil