PK - Swing

Transkrypt

PK - Swing
Kierunek:
Przedmiot:
Forma zajęć:
Temat:
Informatyka i Ekonometria
Programowanie komputerów
Ćwiczenia
Tworzenie
aplikacji
z
wykorzystaniem
graficznego interfejsu użytkownika - Swing.
Biblioteka SWING
• podstawowa bliblioteka do tworzenia interfejsów użytkownika,
• rozszerzenie możliwości biblioteki AWT,
• napisana całkowicie w Javie,
• bogaty zestaw komponentów, przyciski, etykiety, listy, drzewa, tabele itp.,
• łatwa zmiana wyglądu aplikacji,
• pełna obsługa grafiki 2D,
• drag-and-drop,
• internacjonalizacja,
• nazwy obiektów JNazwa,
• główny pakiet to: javax.swing
1
Główne kontenery
JApplet
JDialog
JFrame
Klasa JFrame
•
•
utworzenie okna z tytułem, ramką, menu,
kontener dla innych komponentów.
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JFrame ramka = new JFrame("Pierwszy program");
JLabel napis = new JLabel("Tekst");
ramka.add(napis);
ramka.setSize(200,200);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
}
2
Klasa JPanel
•
podstawowy kontener
import javax.swing.*
import java.awt.*;
class MojPanel extends JPanel {
JButton przycisk1,przycisk2,przycisk3;
public MojPanel (){
przycisk1 = new JButton("pierwszy");
przycisk2 = new JButton("drugi");
przycisk3 = new JButton("trzeci");
add(przycisk1);
add(przycisk2);
add(przycisk3);
setBackground(Color.yellow);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
}
public class Test {
public static void main(String[] args) {
JFrame ramka = new JFrame("Aplikacja w SWING'u");
MojPanel panel = new MojPanel();
ramka.add(panel);
ramka.setSize(400,100);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
}
3
Pozostałe komponenty - kontenery
JPanel
JScrollPane
JSplitPane
JTabbedPane
JToolBar
Pozostałe komponenty
JButton
JComboBox
JList
JMenu
4
JSlider
JTextField
JLabel
JProgressBar
JToolTip
JColorChooser
JFileChooser
JTable
JTextComponent
5
JTree
Menedżery rozkładu
•
•
•
główne kontenery korzystają z rozkładu BorderLayout,
kontener JPanel używa rozkładu FlowLayout,
zmiana domyślnego rozkądu to metoda setLayout()
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
BorderLayout
BoxLayout
FlowLayout
GridLayout
GridBagLayout
6
Obsługa zdarzeń
•
deklaracja klasy obsługującej zdarzenia (interfejs ActionListener),
class Obsluga implements ActionListener
•
stworzenie kodu uruchamianego podczas konkretnego zdarzenia,
public void actionPerformed (ActionEvent e)
•
rejestracja obiektu powyższej klasy jako „nasłuchiwacza” dla jednego bądź też wielu
komponentów,
komponent.addListener (obiekt klasy Obsluga)
•
import odpowiednich interfejsów i klas do obsługi zdarzeń.
import java.awt.event.*;
Zdarzenia i powiązane z nimi typy nasłuchiwaczy
Typ zdarzenia
Typ nasłuchiwacza
ActionListener
Kliknięcie na przycisku, naciśnięcie klawisza Enter podczas
pisania w polu tekstowym, wybranie pozycji z menu
WindowListener
Zamknięcie ramki (główne okno)
MouseListener
Obługa przycisków myszy
MouseMotionListener
Obsługa poruszania myszą
ComponentListener
Komponent staje się widoczny
FocusListener
Komponent uzyskuje fokus
ListSelectionListener
Wybór z listy
Przykładowa aplikacja
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MojPanel extends JPanel {
JButton przycisk1,przycisk2,przycisk3;
public MojPanel (){
przycisk1 = new JButton("Czerwony");
przycisk2 = new JButton("Zielony");
przycisk3 = new JButton("Żółty");
add(przycisk1);
add(przycisk2);
add(przycisk3);
7
Obsluga dzialanie1 = new Obsluga(Color.red);
Obsluga dzialanie2 = new Obsluga(Color.green);
Obsluga dzialanie3 = new Obsluga(Color.yellow);
przycisk1.addActionListener(dzialanie1);
przycisk2.addActionListener(dzialanie2);
przycisk3.addActionListener(dzialanie3);
setBackground(Color.white);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
private class Obsluga implements ActionListener {
private Color kolor;
public Obsluga(Color k){
this.kolor = k;
}
public void actionPerformed(ActionEvent e){
setBackground(kolor);
repaint();
}
}
}
public class Test {
public static void main(String[] args) {
JFrame ramka = new JFrame("Aplikacja w SWING'u");
MojPanel panel = new MojPanel();
ramka.add(panel);
ramka.setSize(400,100);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
}
8
Grafika
•
•
•
metoda paintComponent(Graphics g)
grafika dwuwymiarowa: klasa Graphics2D
przykładowe klasy pakietu java.awt.geom:
Point2D,
Line2D,Rectangle2D,
Ellipse2D
•
•
czcionki: klasa Font
kolory: klasa Color
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
class MojPanel extends JPanel {
JButton przycisk1,przycisk2,przycisk3;
public MojPanel (){
setBackground(Color.white);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.red);
Line2D linia = new Line2D.Double (10,10,380,10);
g2.draw(linia);
g2.setPaint(Color.green);
Rectangle2D pros = new Rectangle2D.Double (10,20,370,40);
g2.draw(pros);
g2.setPaint(Color.blue);
Font czcionka = new Font("Tahoma", Font.BOLD, 20);
g2.setFont(czcionka);
g2.drawString("Figury geometryczne",10,120);
}
}
public class Test {
public static void main(String[] args) {
JFrame ramka = new JFrame("Figury");
MojPanel panel = new MojPanel();
ramka.add(panel);
ramka.setSize(400,200);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
9
ramka.setVisible(true);
}
}
Swing w przykładach
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Zadania
1. Dodaj do przykładowego kodu dwa nowe przyciski "Biały" oraz "Niebieski". Dodaj
również etykietę tekstową JLabel, która będzie zawierać napis: Aktualny kolor to:
aktualny kolor. Uzupełnij brakujący kod tak, aby aplikacja działała prawidłowo.
Wykorzystaj BorderLayout oraz dodatkowe kontenery. Tekst z przycisku możesz
pobrać za pomocą metody getActionCommand() dostępnej w klasie
ActionEvent.
10
2. Napisz prosty kalkulator.
+---------------+-+
| Kalkulator
|x|
+---------------+-+
| Pole tekstowe |
+---+---+---+---+
| 7 | 8 | 9 | / |
+---+---+---+---+
| 4 | 5 | 6 | x |
+---+---+---+---+
| 1 | 2 | 3 | - |
+---+---+---+---+
| 0 | . | = | + |
+---+---+---+---+
Wykorzystaj obsługę zdarzeń, komponenty itd.
3. Napisz nastepujaca aplikacje:
+---------------------------------------------------------------------------+-+
| MiniOutlook - Imię i Nazwisko
|x|
+---------------------------------------------------------------------------+-+
| Plik Wiadomość Konto
Pomoc |
+-----------------------------------------------------------------------------+
| 1 2 3 4 | 5
|
+-------------------------+------------+---------------------------+----------+
|-MiniOutlook
| Od
| Temat
| Rozmiar |
|`-Foldery Lokalne
+------------+---------------------------+----------+
| |-Skrzynka odbiorcza
| Arek
Zaproszenie
12 KB
|
| |-Skrzynka nadawcza
| Madzia
Wyniki
3 KB
|
| |-Elementy wyslane
| Jurek
FWD: Smieszne
195 KB
|
| `-Kopie robocze
|
|
|
+---------------------------------------------------+
|
|
|
|
| Zapraszam Was serdecznie dzis na spotkanie do|
|
| tyczace znajomosci GUI w srodowisku JAVA.
|
|
|
|
|
| Sala 426
|
|
| godz 14.00
|
|
|
|
|
| pozdrawiam
|
|
|
|
|
| Arkadiusz Markowski
|
|
|
|
+-------------------------+---------------------------------------------------+
| Wiadomosci: 34, nie przeczytane: 53
|
+-----------------------------------------------------------------------------+
Aplikacja:
Tytuł: MiniOutlook - Imię Nazwisko (proszę podać swoje dane)
Całość zawiera Menu, Toolbar z obrazkami oraz główne okno podzielone na 4 cześci:
1 cześć: Drzewo z odpowiednią struktura
2 cześć: Tabela z wiadomościami
3 cześć: Podgląd wiadomości (komponent tekstowy)
4 cześć: Status (komponent tekstowy)
11
Wszystkie komponenty zostały opisane ponizej:
Menu:
Struktura menu:
Plik - Nowy, Otwórz, Zapisz | Importuj, Exportuj | Drukuj | Zamknij
Wiadomość - Nowa, Odpowiedz nadawcy, Prześlij dalej
Konto - Nowe, Właściwości
Pomoc - Spis treści | O programie
gdzie | to separator
Toolbar:
5 przycisków (grafika na stronie 1.gif itd.)
podpowiedzi (tooltipsy pod przyciskami):
- Napisz wiadomość
- Odpowiedz nadawcy
- Odpowiedz wszystkim
- Prześlij dalej
- Wyślij i odbierz wszystkie
Drzewo:
Struktura taka jak na formatce
Tabela:
Struktura i zawartość taka jak na formatce
Podglad:
Zawartość taka jak na formatce
Status:
Zawartość taka jak na formatce
12