450 likes | 660 Views
Tworzenie GUI w Javie. Swingujące programowanie. 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.*)
E N D
Tworzenie GUI w Javie • Swingujące programowanie
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 (polepszoneod 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) • Tylko komponenty które nie są wspierane przez dany system operacyjny zaimplementowane • Biblioteka wyższego poziomu JFace JFace SWT JNI Windowing system Operating system
SWT vs. Swing • Niezależne • Różnie to bywa • Look and Feel • Używa Observer Pattern • Manager rozmieszczenia • Zależne od platformy • Wydajne • Używa Observer Pattern • Manager rozmieszczenia JFace SWT Swing java.awt JNI sun.awt Windowing system 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 JFrame JApplet JDialog JWindow
Swing hierarchia http://www.particle.kth.se/~fmi/kurs/PhysicsSimulation/Lectures/07A/swingDesign.html
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... Broadway
Wzorzec observer http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-designpatterns.html
Swing/AWT & Observer menuItem.addActionListener(new ActionListener(){ publicvoid actionPerformed(ActionEvent e) { // tutaj kod obslugi System.out.println(”Wybrano mnie”); } }); JMenuItem Listeners [menuItem]
Swing/AWT & Observer JMenuItem Event Listeners [menuItem] Event menuItem.addActionListener(new ActionListener(){ publicvoid 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