• Nie Znaleziono Wyników

Metody klasy Component użyte w ćwiczeniu

N/A
N/A
Protected

Academic year: 2021

Share "Metody klasy Component użyte w ćwiczeniu"

Copied!
3
0
0

Pełen tekst

(1)

Laboratorium z informatyki sem. II/ćw. 8 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 11

MATERIAŁYPOMOCNICZEDOĆWICZENIA 8

Aplikacja wykorzystująca pakiet Swing

• Pakiet Swing, będący częścią biblioteki Java Foundation Classes, umożliwia tworzenie w języku Java interaktywnych interfejsów graficznych, pozwalających na wprowadzanie danych za pomocą myszki, klawiatury i innych urządzeń tego typu. Wszystkie składniki tego pakietu zostały całkowicie

zaimplementowane w języku Java, co zapewnia zgodność i niezależność wyglądu poszczególnych składników pakietu na różnych platformach.

• Pierwszym etapem tworzenia aplikacji z wykorzystaniem pakietu Swing jest utworzenie klasy, która będzie reprezentowała graficzny interfejs użytkownika. Obiekt tej klasy stanowi kontener

przechowujący poszczególne składniki interfejsu.

Klasa JFrame

• W większości aplikacji takim głównym obiektem interfejsu jest albo okno proste (obiekt klasy JWindow), albo ramka (obiekt klasy JFrame), czyli okna z paskiem tytułu oraz z przyciskami Minimalizuj, Maksymalizuj , Zamknij. Jednym ze sposobów utworzenia graficznego interfejsu

użytkownika wykorzystującego pakiet Swing jest zdefiniowanie go jako podklasy klasy JFrame, tak jak to zrobiliśmy w naszym ćwiczeniu

Metody klasy Component użyte w ćwiczeniu

setSize(int szerokość, int wysokość) zmienia rozmiary komponentu

setBackground(Color kolor) nadaje kolor tła komponentu graficznego przy użyciu metody clearRect

Rysowanie w Java Swing na ramce

• Do wykreślania obiektów graficznych w Javie służy kontekst graficzny będący obiektem (abstrakcyjnej) klasy java.awt.Graphics

.

Klasa ta udostępnia metody pozwalające na rysowanie figur geometrycznych jak również zewnętrznych obrazów. W ćwiczeniu do rysowania wykorzystaliśmy metodę paint(), która jest wywoływana automatycznie, nie powinniśmy jej wywoływać sami.

Odświeżenie komponentu, niezbędne np. do zmiany rysunku, uzyskujemy wywołując metodę

repaint().

Wybrane metody klasy Graphics

Do tworzenia grafiki w naszej aplikacji wykorzystaliśmy m.in. następujące metody klasy

Graphics:

setColor(Color k)ustala bieżący kolor grafiki

setFont(Font f)ustala bieżącą czcionkę

drawString(String s, int x , int y) wyświetla tekst s począwszy od punktu (x, y)

drawLine(int x1, int y1, int x2, int y2)rysuje odcinek

o końcach w punktach

(x1, y1) i (x2, y2), używając bieżącego koloru

Metodę tę można wykorzystać do rysowania punktu, gdy przyjmiemy x1=x2 i y1=y2 fillRect(int x, int y, int width, int height)wypełnia bieżącym kolorem prostokąt, którego lewy górny

wierzchołek ma współrzędne (x, y);width - szerokość, height wysokość

drawRect(int x, int y, int width, int height)rysuje bieżącym kolorem prostokąt (łamaną, którą tworzą boki prostokąta); znaczenie parametrów – jak w metodzie fillRect()

clearRect(int x, int y, int width, int height)wypełnia prostokąt kolorem tła; znaczenie parametrów – jak w metodzie fillRect()

drawOval(int x, int y, int width, int height) – rysuje bieżącym kolorem elipsę wpisaną w prostokąt, którego lewy górny wierzchołek ma współrzędne (x, y);

width - szerokość, height wysokość

fillOval(int x, int y, int width, int height)wypełnia bieżącym kolorem elipsę , znaczenie parametrów - jak w metodzie drawOval

drawArc(int x, int y, int width, int height, int a0, int a)rysuje bieżącym kolorem łuk elipsy określonej przez parametry x, y, width, height;

a0 – kąt początkowy, a – kąt środkowy łuku (w stopniach); kąty rosną przeciwnie do ruchu wskazówek zegara, a kąt 0 jest na godzinie 3.

fillArc(int x, int y, int width, int height, int a0, int a)wypełnia bieżącym kolorem wycinek elipsy, znaczenie parametrów jak w metodzie drawArc

drawPolygon(Polygon p) rysuje bieżącym kolorem obiekt klasy Polygon (wielobok – łamaną zamkniętą)

drawPolygon(int[]x, int[]y, int n)rysuje bieżącym kolorem wielobok o n wierzchołkach, współrzędne wierzchołków są zapisane w tablicach x i y

fillPolygon(Polygon p)wypełnia bieżącym kolorem obiekt klasy Polygon

(2)

Laboratorium z informatyki sem. II/ćw. 8 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 22

fillPolygon(int[]x, int[]y, int n)wypełnia bieżącym kolorem wielobok o n wierzchołkach

drawImage(Image img, int x, int y, ImageObserver observer)wyświetla obraz img umieszczając jego lewy górny wierzchołek w punkcie (x, y); parametr observer umożliwia kontrolę stanu obrazu, może być „pustym” obiektem (null)

translate(int x, int y)przesuwa rysowaną grafikę o (x, y)

Układ współrzędnych na kontekście graficznym

Początek układu współrzędnych kontekstu graficznego obiektu (0,0) znajduje się w jego lewym górnym rogu.

• Zwiększanie wartości współrzędnych następuje w miarę przesuwania się w prawo i w dół.

Maksymalne wartości współrzędnych można określić dziedziczonymi od klasy Component metodami getWidth(), getHeight() zwracającymi odpowiednio szerokość i wysokość okna komponentu.

Klasa Color

Kolor jest obiektem klasy Color, która ma kilka konstruktorów. Instrukcja deklarująca i tworząca określony kolor może mieć na przykład postać:

Color nazwa = new Color(r, g, b); lub Color nazwa = new Color(r, g, b, p)

• Parametry r, g, b są liczbami całkowitymi z zakresu 0..255 i są składowymi reprezentacji RGB (R-red, G-green, B-blue) definiowanego koloru (teoretycznie można otrzymać w ten sposób ponad 16 milionów kolorów).. Parametr p to również liczba całkowita z zakresu 0..255 i określa stopień przezroczystości koloru..

Klasa Color zawiera kilkanaście standardowych wartości kolorów. Są one zadeklarowane jako stałe klasowe, np.

public final static Color blue = new Color(0, 0, 255);

Zatem można je używać bez tworzenia nowych obiektów klasy Color, np. Color.BLUE, Color.orange itp.

• Nazwy stałych określających kolory można pisać małymi lub wielkimi literami dzięki dodatkowym deklaracjom, występującym w definicji klasy Color.

Przykład: Aby generować wartość pola k klasy Color o losowych składowych R, G, B z zakresu od 0 do 255

zastosowaliśmy instrukcję:

Color k = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));

Klasa Font

Czcionkę reprezentuje obiekt klasy Font, tworzony za pomocą konstruktora: Font(krój, styl, rozmiar);

gdzie: krój – to łańcuch tekstowy określający krój czcionki np.”Dialog”, ”SanSerif”, "Helvetica"

• styl - jest jedną ze stałych statycznych typu int z klasy Font: Font.BOLD, Font.ITALIC, Font.PLAIN

rozmiar - to liczba całkowita określająca wielkość czcionki w punktach Klasa FontMetrics

• Aby dobrze rozplanować położenie tekstu, należy uzyskać charakterystyki pisma kontekstu graficznego. Umożliwia to metoda g.getFontMetrics(), która zwraca metrykę (obiekt klasy FontMetrics ) dla bieżącej czcionki kontekstu graficznego g. W klasie FontMetrics zdefiniowana jest z kolei metoda o sygnaturze int stringWidth(String s), która zwraca szerokość obszaru zajmowanego przez napis s. Złożenie metod g.getFontMetrics().stringWidth(s) zwróci szerokość napisu s wyświetlonego bieżącą czcionką.

Klasa Polygon

Ta klasa reprezentuje obiekty geometryczne zwane wielokątami lub wielobokami. W ćwiczeniu wykorzystano jej pola (atrybuty) npoints, xpoints[] i ypoints[] oraz konstruktor, tworzący obiekt klasy Polygon:

int npoints – liczba wierzchołków wielokąta

int[] xpoints – tablica współrzędnych x wierzchołków wielokąta int[] ypoints – tablica współrzędnych y wierzchołków wielokąta

Konstruktor klasy, czyli metoda tworząca nowy obiekt klasy Polygon, ma sygnaturę:

public Polygon (int[] xpoints, int[] ypoints, int npoints)

(3)

Laboratorium z informatyki sem. II/ćw. 8 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 33

Generowanie liczb losowych, klasa Random

Klasa Random

pakietu

java.util udostępnia metody generowania liczb losowych całkowitych i rzeczywistych dla kilku podstawowych rozkładów prawdopodobieństwa. Klasa ma dwa konstruktory:

Random() – tworzy nowy generator liczb losowych

Random(long seed)

tworzy nowy generator liczb losowych i inicjuje go podaną wartością seed ; ten sposób umożliwia uzyskanie identycznych ciągów wartości liczb losowych w różnych

przebiegach programu.

Do generowania kolejnych wartości losowych służą metody:

nextInt()

– zwraca całkowitą liczbę losową z przedziału <

0 , 232

)

nextInt(int n)

– zwraca całkowitą liczbę losową o rozkładzie równomiernym z przedziału <

0 , n) parametr n musi mieć wartość całkowitą dodatnią.

nextDouble()

zwraca liczbę losową rzeczywistą o rozkładzie równomiernym w przedziale <0, 1), działa podobnie jak metoda

Math.random()

klasy

Math

.

Liczby losowe całkowite z przedziału domkniętego <K, L> można uzyskać stosując wzór:

K +r.nextInt( L + 1 - K )

Liczby losowe rzeczywiste z przedziału (A, B) można uzyskać stosując wzór

A +( B - A ) * r. nextDouble()

Obrazy

• Oprócz rysowania własnych obrazków istnieje możliwość wykreślania obrazów zawartych w plikach graficznych typu GIF, JPEG lub PNG. Obrazy są obiektami klasy java.awt.Image, a właściwie jej podklas - ponieważ jest to klasa abstrakcyjna.

Pozyskiwanie obrazów

Odniesienie do obiektu reprezentującego obraz można uzyskać na przykład tworząc obiekt klasy javax.swing.ImageIconkonstruktorem:

ImageIcon(String fileName)

-

podając nazwę pliku lub

,

ImageIcon(URL url)

-

podając jego lokalizację i wydając mu polecenieImage getImage()

.

Tak jak to miało miejsce w przykładzie naszego ćwiczenia

Image tło;

tło = new ImageIcon("tło.jpg").getImage();

Po utworzeniu obiektuImageIconobrazek będzie znajdował się w pamięci operacyjnej

. Wykreślenie obrazka

może być wykonane na przykład przeciążonymi metodami drawImage()z klasyGraphics

,

które wykreślają załadowany fragment obrazka w całości lub podaną jego część, ewentualnie skalując go

.

drawImage(Image img, int x,int y,ImageObserver observer)

drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)

Wszystkie metodydrawImage()wymagają podania jako jednego z argumentów odniesienia do obiektu typu ImageObserver

,

który będzie doglądał procesu ładowania obrazu

.

W praktyce podaje sięthisodnoszące się do komponentu, na którym odbywa się wykreślanie

.

Na przykład w ćwiczeniu zastosowaliśmy instrukcję

:

g.drawImage(tło, 0, 0, this);

Cytaty