Komponenty Swing

Transkrypt

Komponenty Swing
Podstawy
Swing
Tomasz Borzyszkowski
Wprowadzenie
Już Java 1.0 zawierała bibliotekę AWT (Abstract Window Toolkit)
służącą do oprogramowania GUI. Kolejne wersje Java również
wspierały to rozwiązanie.
Swing jest częścią JFC (Java Foundation Classes) – zestawu
predefiniowanych klas definiujących różne API użytkownika.
Korzyści wynikające z używania zestawu Swing (w stosunku do AWT):
 Posiada bogatszy i łatwiejszy w użyciu zestaw elementów interfejsu
użytkownika
 Rzadko występują błędy zwiazane z niezgodnością platformy
 Programy Swing działają tak samo na wszystkich platformach
Swing jest bardziej uniwersalny niż starsze rozwiązania bazujące na
AWT (i “odpowiednikach” z danego systemu operacyjnego).
Jednak wygląd aplikacji bazującej na Swingu może bardzo się różnić
od wyglądu, do którego użytkownik przyzwyczaił się pod danym
systemem operacyjnym.
2
Proste ramki
Zobacz: TestProstejRamki.java
Biblioteka AWT posiada, opartą na “odpowiednikach”, klasę Frame
obsługującą okna najwyższego poziomu. Wersja tej klasy dostarczana
przez Swing nazywa się JFrame i dziedziczy z Frame. Oznacza to, że
wszystkie elementy okna są rysowane przez menedżera okien systemu
operacyjnego, a nie przez Swing.
Ramki są pojemnikami graficznymi (dziedziczą po Container)–
mogą zawierać inne komponenty GUI: przyciski, pola tekstowe, ....
Zobacz: TestRamkiScentrowanej.java
Ramka okna powinna być tak pozycjonowana na ekranie by
zachowywała proporcje względem innych elementów.
Potrzebne informacje możemy pobrać z systemu operacyjnego za
pośrednictwem klasy Toolkit. Do ustawiania pozycji lewego górnego
narożnika ramki służy metoda: setLocation(x, y).
To samo wraz z ustawieniem rozmiaru ramki uzyskamy metodą:
setBounds(x, y, szerokosc, wysokosc).
3
Hierarchia klas JFrame i JPanel
Object
Component
Container
JComponent
Window
JPanel
Frame
JFrame
4
Budowa wewnętrzna obiektu JFrame
W JFrame znajdują się 4
panele/powierzchnie.
Najważniejsza jest
powierzchnia zawartości.
Na niej dodajemy nowe
komponety okna.
Reszta jest potrzebna do
organizacji menu,
powierzchni zawartości i
“wyglądu i wrażenia”.
Tytuł
JFrame
JRoot
Pasek menu
opcjonalnie
JLayeredPane
Powierzchnia
zawartości
Powierzchnia
szklana
5
Umieszczanie elementów
Aby umieścić na pow. zawartości nowe elementy należy:
 zdefiniować klasę rozszerzającą klasę JPanel
 przeładować metodę paintComponent(Graphics g) – w niej
definiujemy co ma być narysowane
 tworzymy obiekt zdefiniowanej klasy
 dodajemy go do pow. zawartości
Panale są elementami interfejsu użytkownika, które:
 posiadają powierzchnię, po której można rysować
 są pojemnikami – tj. mogą przechowywać inne komponenty interfejsu
użytkownika (przyciski, pola tekstowe, ....)
Zobacz: NieWitajSwiecie.java
6
Rysowanie
Zobacz: TestRysunku.java
Już w wersji 1.0 JDK klasa Graphics posiadała metody umożliwiające
rysowanie figur płaskich. Były jednak bardzo ograniczone.
Od wersji SDK 2.0 J2SE zawiera bibliotekę Java 2D z bogatym zbiorem
operacji graficznych.
Aby rysować obiekty wystarczy utworzyć obiekt klasy Graphics2D.
Najczęściej robi się to tak:
Graphics2D g2 = (Graphics2D) g;
gdzie g jest parametrem metody paintComponent.
W większości przypadków by narysować kształt, najpierw trzeba
utworzyć komponent implementujący interfejs Shape, a następnie
wywołać metodę draw klasy Graphics2D.
W SDK 1.0 wielkości figur określano w pikselach. W SDK 2.0 używa się
liczb rzeczywistych float i double. Większość kształtów posiada
wewnętrzne klasy statyczne o koordynatach obu tych typów, np.
Rectangle2D zawiera
Rectangle2D.Float i Rectangle2D.Double.
7
Kolory i wypełnianie
Zobacz:TestWypelnienia.java
Metoda setPaint klasy Graphics2D pozwala na wybranie
aktualnego koloru rysowania na ekranie.
Klasa Color pozwala zdefiniować kolory używając konstruktora z
parametrami RGB koloru. Istnieją w tej klasie także predefiniowane
stałe reprezentujące najczęściej używane kolory: blue, yellow,...)
Metoda setBackground klasy Component pozwala ustalić kolor tła.
Analogicznie setForeground ustala kolor rysowania.
Metody brighter() i darker() klasy Color tworzą jaśniejsze i
ciemniejsze wersje koloru, dla którego zostały wywołane.
Klasa SystemColor zawiera predefiniowane stałe opisujące kolory
używane przez różne elementy systemu operacyjnego, np.
ramka.setBackground(SystemColor.window);
dopasuje kolor tła ramki do domyślnego koloru tła okien użytkownika.
8
Obrazki
By wyświetlić obraz w oknie trzeba go najpierw pobrać z pliku lokalnego
lub z Internetu. Umożliwia to obiekt typu Toolkit – patrz przykład.
Wyświetlić tak pobrany obraz można metodą drawImage klasy
Graphics.
Biblioteka AWT ładując obraz z Internetu często powołuje niezależny
wątek oddelegowany do pobierania obrazu, podczas gdy program
kontynuuje normalne wykonanie. Może to doprowadzić do zakończenia
metody rysowania obrazu na oknie przed jego pobraniem – wyświetlone
zostanie puste miejsce.
By temu zapobiec można zastosować obiekt typu MediaTracker,
który potrafi śledzić stopień załadowania jednego lub większej liczby
obrazów.
Zobacz: TestObrazu.java
Zobacz b. skomplikowany przykład: MandelbrotTest.java
9
Pola tekstowe
Pola tekstowe klasy TextField implementują jednoliniowe pola
tekstowe. Umożliwiają edycję linii tekstu. Konstruktory tej klasy
pozwalają na inicjalizację pola tekstowego zadanym tekstem i/lub liczbą
znaków.
Zawartość pola tekstowego można pobierać i ustawiać metodami
getText() i setText() - metoda trim() pozwala usunąć
początkowe i końcowe spacje.
Model dla wszystkich dokumentów tekstowych jest opisywany przez
interfejs Document. Dzięki temu można nakazać dokumentowi, a nie
komponentowi tekstowemu, aby powiadamiał o zmianie zawartości
komponentu, instalując obiekt słuchacza dokumentu.
W przeciwnym przypadku śledzenie zmian tekstu musiało by być
związane z nasłuchiwaniem klawiatury.
Zobacz: TestTekstu.java
Zobacz: TestObszaruTekstowego.java
10
Przełączniki
Często nazywa się je grupą przełączników, radio buttons.
Gdy jeden z przycisków zostaje włączony, poprzednio zaznaczony
przycisk powinien się wyłączyć. Najpierw musimy utworzyć grupę
przycisków:
ButtonGroup gr = new ButtonGroup();
a następnie dodawać do nich kolejne przyciski:
// wyłączony
gr.add(new JRadioButton(“Pierwszy”, false));
// włączony
gr.add(new JRadioButton(“Pierwszy”, true));
Zobacz: TestPrzelacznikow.java
11
Listy kombinowane
Listy te służą do wybierania więcej niż jednej możliwosci z listy wyboru.
Jeżeli lista ma włączoną opcję umożliwiającą edycję – metoda
setEditable(), masz możliwość zmiany wybranego łańcucha.
Metoda getSelectedItem() pobra aktualny element listy.
Fragment zakładający listę:
lista = new JComboBox();
lista.setEditable(true);
lista.addItem(“Pierwszy”);
lista. addItem(“Drugi”);
lista.insertItemAt(“Pierwszy i pol”, 1);
Usuwamy:
lista.removeItem(“Drugi”);
lista.removeItemAt(0);
Zobacz: TestListyKombinowanej.java
12
Menu
Menu to obiekt typu JMenuBar, który można dołączyć w dowolnym
miejscu okna – zwykle jest to górna część ramki:
ramka.setJMenuBar(pasekMenu);
Następnie możemy do paska menu dodawać kolejne menu rozwijalne –
obiekty typu JMenu, a do nich poszczególne pola typu JMenuItem lub
sepatatory.
Do elementów menu możemy dodawać ikony, mnemoniki i klawisze
skrótu. Poszczególne pozycje menu możemy tekże włączać i wyłączać.
Więcej szczegółów w przykładowym programie.
Zobacz: TestMenu.java
13

Podobne dokumenty