→ Slide 1

Graficzne interfejsy użytkownika - AWT

→ Slide 2

AWT - Abstract Window Toolkit

→ Slide 3

Hierarchia klas AWT - najważniejsze elementy

Hierarchia klas AWT

→ Slide 4

Component i Container

→ Slide 5

Komponenty AWT - szybki przegląd

→ Slide 6

Kontenery AWT i okna

→ Slide 7

Praca z Frame - minimalny szkielet

import java.awt.*;
import java.awt.event.*;
 
public class MainWindow {
    public static void main(String[] args) {
        Frame frame = new Frame("AWT - Demo");
        frame.setSize(500, 300);
        frame.setLayout(new FlowLayout());
        frame.add(new Label("Witaj w AWT"));
 
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                frame.dispose();
                System.exit(0);
            }
        });
 
        frame.setVisible(true);
    }
}
→ Slide 8

LayoutManager

→ Slide 9

Najczęstsze układy: FlowLayout, BorderLayout, GridLayout

Panel p = new Panel(new GridLayout(2, 2));
p.add(new Button("A"));
p.add(new Button("B"));
p.add(new Button("C"));
p.add(new Button("D"));
→ Slide 10

Model zdarzeń AWT

Przepływ:

  1. użytkownik wykonuje akcję (np. kliknięcie przycisku),
  2. AWT tworzy obiekt zdarzenia (np. ActionEvent),
  3. zarejestrowany listener otrzymuje callback i wykonuje logikę.
→ Slide 11

Najważniejsze interfejsy listenerów

→ Slide 12

Klasy adapterów - mniej kodu boilerplate

frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
});
→ Slide 13

Trzy style obsługi zdarzeń

  1. Osobna klasa implementująca listener (najczytelniejsze przy większym kodzie)
  2. Klasa wewnętrzna (łatwy dostęp do pól klasy zewnętrznej)
  3. Klasa anonimowa / lambda (krótki kod, gdy logika jest mała)
Button b = new Button("Policz");
TextField tf = new TextField(10);
 
b.addActionListener(e -> {
    String text = tf.getText().trim();
    System.out.println("Dane: " + text);
});
→ Slide 14

Rysowanie w AWT: Graphics + Canvas

class DrawingCanvas extends Canvas {
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLUE);
        g.drawString("AWT Canvas", 20, 30);
        g.setColor(Color.RED);
        g.fillOval(20, 50, 120, 80);
    }
}
→ Slide 15

paint() vs repaint()

→ Slide 16

Dobre praktyki i typowe pułapki

→ Slide 17

Ćwiczenia praktyczne

→ Slide 18

Zadanie 6: Minutnik w AWT

Stwórz w bibliotece AWT prostą aplikację typu minutnik, która odlicza czas od wartości podanej przez użytkownika do 0.

Wymagania:

lub wyświetleniem komunikatu w oknie dialogowym.

Przykładowy wygląd aplikacji:

Minutnik AWT - przykładowy interfejs

→ Slide 19

Materiały dodatkowe