Tworzenie GUI

advertisement
27 kwiecień 2007
Tworzenie GUI w Javie
Swingujące programowanie
Mirosław Ochodek
[email protected]
Szkolenie finansowane ze środków Europejskiego Funduszu Społecznego (75%) i budżetu
państwa (25%) w ramach Zintegrowanego Programu Operacyjnego Rozwoju Regionalnego
Plan
▪
Wprowadzenie
• Podejścia do budowy GUI w Javie
▪
Budowa GUI przy pomocy Swinga
• Wprowadzenie do JFC - Swinga
• Przegląd komponentów graficznych biblioteki oraz sposób
zarządzania
• Grafika
Swing
▪ JFC udostępniane z JRE (javax.swing.*)
▪ Kiedyś mało wydajny (polepszone od Java 1.4)
▪ Napisane w Javie (AWT – Java / C)
▪ Niezależne od platformy
Swing
java.awt
sun.awt
Operating system
SWT
▪
Zależne od platformy (jest implementacja dla
większości platform)
▪
▪
Używa natywnych kontrolek systemowych (JNI)
▪
Biblioteka wyższego poziomu JFace
Tylko komponenty które nie są wspierane przez
dany system operacyjny zaimplementowane
JFace
SWT
JNI
Windowing system
Operating system
SWT vs. Swing
▪
▪
▪
▪
▪
▪
▪
Niezależne
Używa Observer Pattern
▪
Używa Observer Pattern
Manager rozmieszczenia
▪
Manager rozmieszczenia
Zależne od platformy
Wydajne
Różnie to bywa
Look and Feel
JFace
SWT
Swing
JNI
java.awt
Windowing system
sun.awt
Operating system
Operating system
Plan
▪ Wprowadzenie
• Podejścia do budowy GUI w Javie
▪ Budowa GUI przy pomocy Swinga
• Wprowadzenie do JFC - Swinga
• Przegląd komponentów graficznych biblioteki oraz
sposób zarządzania
• Grafika
Java Foundation Classes
Zawiera:
▪ The Swing Components
▪ Pluggable Look and Feel Support
▪ Accessibility API
▪ Java 2D API (Java 2 Platform only)
▪ Drag and Drop Support (Java 2 Platform only)
Podejście MVC
▪ Model – dane stanu konkretnego komponentu
▪ View – jak komponent jest widziany na ekranie
▪ Controller – jak występowanie zdarzeń łączy
dwa powyższe
http://www.tol.oulu.fi/kurssit/ot3/Lectures/OT3_L3.html
Swing hierarchia
Kontenery najwyższego poziomu
Swing hierarchia
http://www.particle.kth.se/~fmi/kurs/PhysicsSimulation/Lectures/07A/swingDesign.html
Wzorzec Composite
Wzorzec Composite
http://www.javaworld.com/javaworld/jw-09-2002/jw-0913-designpatterns.html
Kontenery najwyższego poziomu
▪ Każdy program napisany w Swingu, musi
posiadać przynajmniej jeden kontener
najwyższego poziomu
• JFrame ( pojedyncze okno aplikacji)
• JDialog (okienko dialogowe)
• JApplet (dla apletów)
Kontenery najwyższego poziomu
www.java.sun.com
Hello world - JFrame
Eclipse – przykład (1)
Menu
▪ Specjalna warstwa (Menu Bar)
▪ Menu składane z „klocków”
www.java.sun.com
Menu
Eclipse – przykład (2)
Obsługa akcji
▪ Obsługa zdarzeń oparta jest na wzorcu
Observer/Listener
▪ Każdy komponent może być obserwowany
przez wielu obserwatorów
▪ Każdy komponent może obsługiwać wiele typów
słuchaczy (np. zdarzenia obsługi myszy,
klawiatury, zmiany struktury itd.)
Wzorzec observer
Następny proszę!
Lalaaaalalaa!
Dziękujemy
Proszę nie
dzwonić,
My zadzwonimy...
Wzorzec observer
http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-designpatterns.html
Swing/AWT & Observer
menuItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
// tutaj kod obslugi
System.out.println(”Wybrano mnie”);
JMenuItem
Listeners [menuItem]
}
});
Swing/AWT & Observer
JMenuItem
Listeners [menuItem]
menuItem.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
// tutaj kod obslugi
System.out.println(”Wybrano mnie”);
}
});
Przykłady słuchaczy AWT
Event listener interfaces in java.awt.events
▪ ActionListener
▪ AdjustmentListener
▪ AWTEventListener
▪ ComponentListener
▪ ContainerListener
▪ FocusListener Focus
▪ HierarchyBoundsListener Hierarchy
▪ HierarchyListener Hierarchy
▪ InputMethodListener
▪ ItemListener
▪ KeyListener
▪ MouseListener
▪ MouseMotionListener
▪ MouseWheelListener
▪ TextListener
▪ WindowFocusListener
▪ WindowListener
▪ WindowStateListener
Przykłady słuchaczy Swing
Event listener interfaces in javax.swing.event
▪ AncestorListener
▪ CaretListener
▪ CellEditorListener
▪ ChangeListener
▪ DocumentListener
▪ HyperlinkListener
▪ InternalFrameListener
▪ ListDataListener
▪ ListSelectionListener
▪ MenuDragMouseListener
▪ MenuKeyListener
▪ MenuListener
▪ MouseInputListener
▪ PopupMenuListener
▪ TableColumnModelListener
▪ TableModelListener
▪ TreeExpansionListener
▪ TreeModelListener
▪ TreeSelectionListener
▪ TreeWillExpandListener
▪ UndoableEditListener
Menu
Eclipse – przykład (3)
Look & Feel
▪ W JFC istnieje możliwość zmiany sposobu
wyświetlania kontrolek
▪ Domyślny wygląd to Metal / Aqua
▪ Można wybrać wygląd systemu operacyjnego
▪ W JFC nie korzystano z kontrolek natywnych
systemu (zmienione podejście ostatnio)
Look & Feel
Eclipse – przykład (4)
Podstawowe komponenty
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
JLabel
JButton
JCheckBox
JRadioButton
JPanel
JSlider
JColorChooser
JTextField
JList
JScrollPane
JTree
…
Eclipse – przykład (5)
Layout Managers
▪ Służą do automatycznego rozkładania
komponentów
▪ Działają według określonych zasad
▪ Przykłady
• FlowLayout
• BorderLayout
• GridLayout
• GridBagLayout
• CardLayout
FlowLayout
▪ Układa komponenty od lewej do prawej w
kolejnych wierszach
Eclipse – przykład (6)
BorderLayout
▪
Każdy komponent umieszczany jest w jednym z
pięciu rejonów:
•
•
•
•
•
▪
▪
na dole,
na górze,
po lewo,
po prawo
po środku
Komponenty dodawane do kontenera bez wskazania
rejonu domyślnie dodawane są po środku
Dodanie nowego komponentu do rejonu już
posiadającego zawartość spowoduje jej podmianę
Eclipse – przykład (7)
GridLayout
▪ GridLayout układa komponenty w komórkach
siatki, której rozmiar określamy przy pomocy
parametrów konstruktora.
▪ Komponenty zajmują kolejne komórki zgodnie z
kolejnością dodawania.
Eclipse – przykład (8)
GridBagLayout
▪ Zaawansowana możliwość układania
komponentów, wpisywanych w siatkę
Eclipse – przykład (9)
CardLayout
▪ Komponenty umieszczane jak talia kart
Eclipse – przykład (10)
Okna dialogowe wejścia/wyjścia
Różne rodzaje dialogów, udostępnianych przez klasę
JOptionPane
Tworzenie okien następuje poprzez wywołanie statycznych metod
klasy JOptionPane. Metody te jako wynik zwracają kod
wybranego przycisku albo wartość wprowadzanych do nich
danych.
Plan
▪ Wprowadzenie
• Podejścia do budowy GUI w Javie
▪ Budowa GUI przy pomocy Swinga
• Wprowadzenie do JFC - Swinga
• Przegląd komponentów graficznych biblioteki oraz
sposób zarządzania
• Grafika
Rysowanie na komponencie
▪ Każdy komponent ma metodę paintComponent,
w której można rysować
▪ Można ją przeciążyć i zaimplementować własne
rysowanie
▪ W metodzie dostępna jest zmienna typu
Graphics, przekazywana jako parametr
▪ Możemy zrzutować ją na Graphics2D, aby
otrzymać bardziej rozbudowany wachlarz
możliwości
Rysowanie na komponencie
▪ Przydatne metody
• // Ustawienia ołówka
— g.setColor(someColor);
— g.setFont(someLimitedFont);
• // Rysowanie kształtów
—
—
—
—
—
—
—
—
g.drawString(...);
g.drawLine(...)
g.drawRect(...); // outline
g.fillRect(...); // solid
g.drawPolygon(...); // outline
g.fillPolygon(...); // solid
g.drawOval(...); // outline
g.fillOval(...); // solid
Rysowanie na komponencie
▪ Przydatne metody
•
•
•
•
•
•
•
•
•
•
g2d.setPaint(fillColorOrPattern);
g2d.setStroke(penThicknessOrPattern);
g2d.setComposite(someAlphaComposite);
g2d.setFont(anyFont);
g2d.translate(...);
g2d.rotate(...);
g2d.scale(...);
g2d.setTransform(someAffineTransform);
g2d.draw(s); // outline
g2d.fill(s); // solid
Przekształcenia
http://www.glyphic.com/transform/plugin/1intro.html
Przekształcenia
http://www.glyphic.com/transform/plugin/4app.html
Przekształcenia
http://www.glyphic.com/transform/plugin/7wiggly.html
Przykład
Eclipse – przykład (11)
Swing
Dziękuje za uwagę
http://java.sun.com/docs/books/tutorial/uiswing/components/examples/index.html
Download