Komponenty
373
Ćwiczenie 41.3.
Zmodyfikuj kod z listingu 8.27 tak, aby obsługa zdarzeń odbywała się poprzez obiekt niezależnej klasy pakietowej implementującej interfejs WindowListener.
Ćwiczenie 41.4.
Napisz aplikację zawierającą wielopoziomowe menu kontekstowe.
Ćwiczenie 41.5.
Napisz aplikację, która będzie wyświetlała w swoim oknie aktualne współrzędne kursora myszy.
Ćwiczenie 41.6.
Napisz aplikację zawierającą menu. Po wybraniu z niego dowolnej pozycji powinno pojawić się nowe okno (w tym celu utwórz nowy obiekt klasy JFrape). Okno to musi dać się zamknąć przez kliknięcie odpowiedniej ikony z paska tytułu.
Lekcja 42. Komponenty
Każda aplikacja okienkowa, oprócz menu, których różne rodzaje poznaliśmy w lekcji 41., jest także wyposażona w wiele innych elementów graficznych, takich jak przyciski, etykiety, pola tekstowe czy listy rozwijane8. Pakiet javax.swing zawiera oczywiście odpowiednią porcję klas, które pozwalają na zastosowanie tego rodzaju komponentów.
Jest ich bardzo wiele, część z nich poznamy w ostatniej, 42. lekcji.
Klasa komponent
Praktycznie wszystkie graficzne komponenty, które pozwalają na zastosowanie typowych elementów środowiska okienkowego, dziedziczą, pośrednio lub bezpośrednio, z klasy JCopponent, a zatem są wyposażone w jej metody9. Metod tych jest dosyć dużo, ich pełną listę można znaleźć w dokumentacji JDK. W tabeli 8.7 zostały natomiast zebrane niektóre z nich, przydatne przy wykonywaniu typowych operacji. Większość została odzie-dziczona z klasy Copponent biblioteki AWT. W kolumnie Od JDK została zawarta informacja na temat tego, kiedy po raz pierwszy dana metoda pojawiła się w JDK. Wartości w nawiasach oznaczają natomiast, kiedy dana metoda została redefiniowana w klasie JCopponent.
8 Często spotyka się też termin „lista rozwijalna”.
9 A także klas, z których dziedziczy JComponent.
374
Rozdział 8. Äplikacje i aplety
Tabela 8.7. Wybrane metody klasy Component
Deklaracja metody
Opis
Od JDK
void addKeyListener(KeyListener l)
Ustala obiekt, który będzie obsługiwał zdarzenia
1.1
związane z klawiaturą.
void addMouseListener(MouseListener l) Ustala obiekt, który będzie obsługiwał zdarzenia 1.1
związane z klikaniem przyciskami myszy.
void addMouseMotionListener
Ustala obiekt, który będzie obsługiwał zdarzenia
1.1
(MouseMotionListener l)
związane z ruchami myszy.
boolean contains(int x, int y)
Sprawdza, czy komponent zawiera punkt
1.1
o współrzędnych x, y.
boolean contains(Point p)
Sprawdza, czy komponent zawiera punkt
1.1
wskazywany przez argument p.
Color getBackground()
Pobiera kolor tła komponentu.
1.0
Rectangle getBounds()
Zwraca rozmiar komponentu w postaci obiektu
1.0
klasy Rectangle.
Cursor getCursor()
Zwraca kursor związany z komponentem.
1.1
iont getiont()
Zwraca czcionkę związaną z komponentem.
1.0
iontMetrics getiontMetrics(iont font)
Zwraca obiekt opisujący właściwości czcionki
1.0 (1.5)
związanej z komponentem.
Color getioreground()
Zwraca pierwszoplanowy kolor komponentu.
1.0
Graphics getGraphics()
Zwraca tzw. graficzny kontekst urządzenia,
1.0 (1.2)
obiekt pozwalający na wykonywanie operacji
graficznych na komponencie.
int getHeight()
Zwraca wysokość komponentu.
1.2
String getName()
Zwraca nazwę komponentu.
1.1
Container getParent()
Zwraca obiekt nadrzędny komponentu.
1.0
Dimension getSize()
Zwraca rozmiary komponentu w postaci obiektu
1.1
klasy Dimension.
int getWidth()
Zwraca szerokość komponentu.
1.2
int getX()
Zwraca współrzędną x położenia komponentu.
1.2
int getC()
Zwraca współrzędną y położenia komponentu.
1.2
void repaint()
Odrysowuje cały obszar komponentu.
1.0
void repaint(int x, int y,
Odrysowuje wskazany obszar komponentu.
1.0
int width, int height)
void setBackground(Color c)
Ustala kolor tła komponentu.
1.0 (1.2)
void setBounds(int x, int y,
Ustala rozmiar i położenie komponentu.
1.1
int width, int height)
void setBounds(Rectangle r)
Ustala rozmiar i położenie komponentu.
1.1
void setCursor(Cursor cursor)
Ustawia rodzaj kursora przypisany
1.1
komponentowi.
void setiont(iont f)
Ustawia czcionkę przypisaną komponentowi.
1.0 (1.2)
void setLocation(int x, int y)
Zmienia położenie komponentu.
1.1
Lekcja 42. Komponenty
375
Tabela 8.7. Wybrane metody klasy Component — ciąg dalszy
Deklaracja metody
Opis
Od JDK
void setLocation(Point p)
Zmienia położenie komponentu.
1.1
void setName(String name)
Ustala nazwę komponentu.
1.1
void setSize(Dimension d)
Ustala rozmiary komponentu.
1.1
void setSize(int width, int height)
Ustala rozmiary komponentu.
1.1
void setVisible(boolean b)
Wyświetla lub ukrywa komponent.
1.0 (1.2)
Etykiety
Etykiety tekstowe to jedne z najprostszych komponentów graficznych. Umożliwiają one wyświetlanie tekstu. Aby utworzyć etykietę, należy skorzystać z klasy JLabel. Konstruktor klasy JLabel może być bezargumentowy, tworzy wtedy pustą etykietę, lub przyjmować jako argument tekst, który ma być na niej wyświetlany. Po utworzeniu etykiety znajdujący się na niej tekst można pobrać za pomocą metody getText, jeśli natomiast chcemy go zmienić, korzystamy z metody setText. Etykietę umieszczamy w oknie lub na innym komponencie, wywołując metodę add. Prosty przykład obrazujący wykorzystanie klasy JLabel jest widoczny na listingu 8.37, natomiast efekt jego działania na rysunku 8.24.
Listing 8.37.
import javax.swing.*;
public class Aplikacja extends Jirame {
public Aplikacja() {
setDefaultCloseOperation(Jirame.EXIT_ON_CLOSE);
setLayout(null);
JLabel label1 = new JLabel("Pierwsza etykieta");
label1.setBounds(100, 40, 120, 20);
JLabel label2 = new JLabel();
label2.setText("Druga etykieta");
label2.setBounds(100, 60, 120, 20);
add(label1);
add(label2);
setSize( 20, 200);
setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Aplikacja();
}
});
}
}
376
Rozdział 8. Äplikacje i aplety
Rysunek 8.24.
Wygląd przykładowych
etykiet tekstowych