Eğitim Portalı/Java/AWT'ye Giriş (Abstract Window Toolkit)
Java01-java/63-awt-giris

AWT'ye Giriş (Abstract Window Toolkit)

AWT (Abstract Window Toolkit), Java'nın ilk grafik arayüz (GUI) kütüphanesidir (1996). Pencere, buton, metin kutusu gibi bileşenleri ve bunların olaylarını (tıklama, tuş) yönetir. Bugün masaüstü GUI'de yerini büyük öl…

AWT'ye Giriş (Abstract Window Toolkit)

AWT (Abstract Window Toolkit), Java'nın ilk grafik arayüz (GUI) kütüphanesidir (1996). Pencere, buton, metin kutusu gibi bileşenleri ve bunların olaylarını (tıklama, tuş) yönetir. Bugün masaüstü GUI'de yerini büyük ölçüde Swing'e (sonraki konu) bırakmıştır; ama Swing AWT'nin üzerine kurulduğu ve olay modeli ile geometri/renk sınıfları hâlâ ortak kullanıldığı için AWT'yi anlamak önemlidir.

Not: Bu portal headless (ekransız) çalışır; gerçek bir pencere açamaz. Bu yüzden örnekler AWT'nin ekran gerektirmeyen gerçek sınıflarını (olay modeli, geometri, renk) kullanır. Tam pencere kodu aşağıda gösterilir — onu kendi makinende çalıştırabilirsin.

GUI'nin kalbi: olay-dinleyici modeli

Grafik arayüzler olay tabanlıdır: program akışı yukarıdan aşağı değil, kullanıcı etkileşimiyle (tıklama, tuş, fare) ilerler. Mekanizma şudur: bir bileşene (olay kaynağı) bir dinleyici (listener) eklersin; o olay olduğunda dinleyicinin metodu çağrılır.

buton.addActionListener(e -> System.out.println("tıklandı: " + e.getActionCommand()));

ActionListener tek metotlu (functional) bir arayüzdür; bu yüzden lambda ile yazılır. Örnek 1 (./Ornek1.java) bir butonu taklit eden bir kaynak kurar, ona dinleyiciler ekler ve "tıklama"yı simüle ederek gerçek ActionEvent/ActionListener akışını gösterir. Bu gözlemci (observer) deseni, tüm GUI çatılarının (AWT, Swing, Android, web) temelidir.

Geometri ve renk sınıfları

AWT, bileşenleri konumlandırmak ve çizmek için ekran gerektirmeyen veri sınıfları sağlar:

  • Point (x, y konum), Dimension (genişlik, yükseklik)
  • Rectangle (konum + boyut): intersects, intersection, union, contains — çarpışma ve yerleşim hesapları (GUI'de ve oyunlarda).
  • Color (RGB renk): bileşen renkleri, çizim; brighter/darker, hazır sabitler.

Örnek 2 (./Ornek2.java) bunları çalıştırır.

Gerçek AWT penceresi (kendi makinende)

Portal headless olduğu için aşağıdaki kod burada çalışmaz; ama gerçek bir ortamda bir pencere açar:

import java.awt.*;
import java.awt.event.*;

public class MerhabaAWT {
    public static void main(String[] args) {
        Frame pencere = new Frame("AWT Penceresi");
        Button buton = new Button("Tıkla");
        Label etiket = new Label("Henüz tıklanmadı");

        buton.addActionListener(e -> etiket.setText("Tıklandı!"));

        pencere.setLayout(new FlowLayout());
        pencere.add(buton);
        pencere.add(etiket);
        pencere.setSize(300, 150);
        pencere.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) { pencere.dispose(); }
        });
        pencere.setVisible(true);
    }
}

Buradaki Frame (pencere), Button, Label, FlowLayout (yerleşim yöneticisi) ve WindowListener AWT'nin görsel parçalarıdır.

AWT vs Swing

AWTSwing
Çıkış1996 (ilk)1998 (AWT üzerine)
Bileşenlerİşletim sistemine bağlı (heavyweight)Java ile çizilen (lightweight)
GörünümPlatforma göre değişirTutarlı, "look and feel" değişebilir
Bileşen zenginliğiAz (Button, Label, TextField...)Çok (JTable, JTree, JTabbedPane...)
BugünÇoğunlukla Swing'e bırakıldıMasaüstünde yaygın

Özet

AWT'nin Java'nın ilk GUI kütüphanesi olduğunu; tüm grafik arayüzlerin temeli olan olay-dinleyici modelini (ActionListener/ActionEvent; Örnek 1) ve ekran gerektirmeyen geometri/renk sınıflarını (Point/Rectangle/Color; Örnek 2) öğrendik; gerçek pencere kodunu ve AWT↔Swing farkını gördük. Sırada, AWT'nin üzerine kurulan modern masaüstü GUI kütüphanesi: Swing.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: AWT olay modeli — ActionListener / ActionEvent (gerçek AWT sınıfları, ekran gerekmez).
2// GUI'nin kalbi olan "olay-dinleyici" (event-listener) mekanizmasını gösterir.
3// Çalıştırma: java Ornek1.java
4import java.awt.event.ActionEvent;
5import java.awt.event.ActionListener;
6import java.util.ArrayList;
7import java.util.List;
8
9public class Ornek1 {
10
11    // Gerçek bir butonu taklit eden basit kaynak: dinleyicileri tutar, tıklanınca olay yayar.
12    static class Buton {
13        private final String etiket;
14        private final List<ActionListener> dinleyiciler = new ArrayList<>();
15        Buton(String etiket) { this.etiket = etiket; }
16
17        // Gerçek AWT'deki gibi: addActionListener
18        void addActionListener(ActionListener l) { dinleyiciler.add(l); }
19
20        // "Tıklama" -> kayıtlı tüm dinleyicilere ActionEvent gönder.
21        void tikla() {
22            ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, etiket);
23            for (ActionListener l : dinleyiciler) l.actionPerformed(e);
24        }
25    }
26
27    public static void main(String[] args) {
28        Buton kaydet = new Buton("Kaydet");
29
30        // Dinleyici eklemek = "bu olunca şunu yap". Lambda ile (ActionListener functional interface):
31        kaydet.addActionListener(e -> System.out.println("1. dinleyici: '" + e.getActionCommand() + "' tıklandı"));
32        kaydet.addActionListener(e -> System.out.println("2. dinleyici: veriler kaydediliyor..."));
33
34        // Kullanıcı tıkladı (simülasyon) -> tüm dinleyiciler tetiklenir.
35        System.out.println(">> Kaydet butonu tıklandı:");
36        kaydet.tikla();
37
38        System.out.println("""
39
40                --- AWT olay modeli (event-listener) ---
41                GUI olay tabanlıdır: bir bileşene (kaynak) DİNLEYİCİ eklersin; olay olunca dinleyici çağrılır.
42                Gerçek AWT'de: buton.addActionListener(e -> ...); kullanıcı tıklayınca actionPerformed çalışır.
43                ActionListener tek metotlu (functional) arayüzdür -> lambda ile yazılır.
44                Bu gözlemci (observer) deseni, tüm GUI çatılarının (AWT, Swing, Android, web) temelidir.""");
45    }
46}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: AWT geometri ve renk sınıfları — Point, Dimension, Rectangle, Color (ekran gerekmez).
2// GUI yerleşimi ve çizimde kullanılan temel veri tipleri.
3// Çalıştırma: java Ornek2.java
4import java.awt.Color;
5import java.awt.Dimension;
6import java.awt.Point;
7import java.awt.Rectangle;
8
9public class Ornek2 {
10
11    public static void main(String[] args) {
12        // Point: konum (x, y). Dimension: boyut (genişlik, yükseklik).
13        Point konum = new Point(10, 20);
14        Dimension boyut = new Dimension(100, 50);
15        System.out.println("Konum: " + konum + ", Boyut: " + boyut);
16
17        // Rectangle: konum + boyut. Çarpışma/kesişim/içerme testleri (GUI ve oyunlarda sık).
18        Rectangle r1 = new Rectangle(0, 0, 100, 100);
19        Rectangle r2 = new Rectangle(50, 50, 100, 100);
20        System.out.println("\nr1 ile r2 kesişiyor mu? " + r1.intersects(r2));
21        System.out.println("Kesişim alanı: " + r1.intersection(r2));
22        System.out.println("Birleşim: " + r1.union(r2));
23        System.out.println("r1, (30,40) noktasını içeriyor mu? " + r1.contains(30, 40));
24
25        // Color: RGB renk. GUI bileşen renkleri ve çizim için.
26        Color turuncu = new Color(255, 140, 0);
27        System.out.printf("%nTuruncu -> R=%d G=%d B=%d, hex=#%06X%n",
28                turuncu.getRed(), turuncu.getGreen(), turuncu.getBlue(), turuncu.getRGB() & 0xFFFFFF);
29        Color daha = turuncu.brighter();
30        System.out.println("Daha parlak: R=" + daha.getRed() + " G=" + daha.getGreen() + " B=" + daha.getBlue());
31        System.out.println("Hazır renk: " + Color.BLUE);
32
33        System.out.println("""
34
35                --- AWT geometri ve renk ---
36                Point (konum), Dimension (boyut), Rectangle (konum+boyut), Color (renk) — GUI'nin temel veri tipleri.
37                Rectangle: intersects/intersection/union/contains ile çarpışma ve yerleşim hesapları (oyunlarda da).
38                Color: RGB değerleri, brighter/darker, hazır sabitler (Color.RED...).
39                Bu sınıflar EKRAN gerektirmez (saf veri); bileşenleri konumlandırırken/çizerken kullanılır.""");
40    }
41}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.