Lekcja 4

Pierwsze okno

Po zajęciach wprowadzająco - utrwalająych, nadszedł czas nauczyć się czegoś, co ma wspólnego z interfejsem graficznym. Jest to ciekawe oderwanie od tego, co robiliśmy jak dotąd w czasie studiów.

I. Klasa JFrame


import javax.swing.*;

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame okno = new JFrame();
            okno.setSize(1024, 768);
            okno.setTitle("Hello, world!");
            okno.setVisible(true);
        });
    }
}
Zadanie 0

Wydziel kod z metody main do konstruktora nowej klasy, która dziedziczy po JFrame.

Pamiętaj o stworzeniu obiektu tej klasy w obrębie lambdy z metody main.

W ten sposób kod jest lepiej zorganizowany.

Zadanie 1

Aktualnie nasze okno cierpi na tzw. syndrom skypa. Jeśli zamkniemy okno, to nie wyłączamy programu.

Aby zamknięcie danego okna miało spowodować zakończenie działania programu, potrzebujemy dodać w klasie widoku (okna):


// gdy zamykam okno, kończę program
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

II. Grafika komputerowa

Zadanie 2

Nadpisz metodę paint w klasie dziedziczącej po JFrame.

Umieść niebieski okrąg w tworzonym oknie.


class A extends JFrame {
    A() {
        //...
    }
    public void paint(Graphics g) {
        // Ustawiamy kolor pisaka RGB
        g.setColor(new Color(255, 1, 100));
        // W punkcie (512, 512) rysujemy elipsę o wymiarach 40x40
        // Uwaga: punkt (0,0) znajduje się w górnym, lewym punkcie okna
        g.drawOval(512, 512, 40, 40);
    }
}
    
Zadanie 3

Metody getWidth(), getHeight(), służą do pobierania aktualnego rozmiaru okna.

Wylicz współrzędne dla okręgu tak, aby zawsze rysował się po środku okna.

Uwaga: uwzględnij, że nie podajemy (x,y) środka, ale lewo-górnego punktu prostokąta opisującego ten okrag.

Zadanie 4

Uruchom program z poprzedniego zadania i zacznij zmieniać rozmiar okna za pomocą myszy.

Zadanie 5

Napraw błąd widoczny w poprzednim zadaniu.

Można to zrobić wywołując metodę paint z klasy nadrzędnej przed naszym rysowaniem okręgu.

Można też użyć metody clearRect na obiekcie Graphics.

Zadanie 6

Dodaj nowe pola typu int: x, y, radius do tworzonej klasy okna.

Niech metoda paint rysuje okrąg w (x, y) o wielkości radius.

Stwórz dodatkowy wątek, który będzie zmieniał wielkości tych atrybutów.

Zadanie 7

Spraw, aby okrąg odbijał się od krawędzi.