REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024×768
<html> <style type=„text/css”> p { text-align: left;} .reveal { font-size: 30px; } .reveal section { width: 96%; margin: 0 auto; } .reveal .slides { width: 60% !important; } .reveal ul, .reveal ol { margin-left: 1.5em; } .reveal pre code {
height: 100%; max-height: 100%; box-sizing: border-box; }
</style> </html>
Zajęcia 7. - Graficzne interfejsy użytkownika - Swing
Swing
Swing to biblioteka będąca częścią frameworka JFC, służąca do budowy interfejsów graficznych. Zbudowana jest na AWT i zaimplementowana w czystej Javie. Swing jest niezależny od systemu operacyjnego - kontrolki wyglądają podobnie na różnych platformach. Biblioteka zapewnia bogatszy zestaw kontrolek niż AWT i wspiera wzorzec MVC (Model View Controller), co ułatwia rozdzielenie logiki, danych i prezentacji. Swing jest powszechnie używany zamiast AWT.
Studium przypadku (krótkie wtrącenie)
Jak zbudować interfejs działający i wyglądający podobnie na wielu platformach?
- Dla każdej platformy napisać aplikację natywną - dużo pracy.
- Stworzyć dobrze napisany backend dostępny na wielu platformach + frontend webowy (przeglądarka lub
opakowanie natywne) - szybsze i tańsze rozwiązanie.
Hierarchia klas Swing
Dokumentacja
Tworzenie okna
Okno tworzy się podobnie jak w AWT, lecz korzystając z klas Swing (np. JFrame). Można to zrobić:
- Przez asocjację - tworząc obiekt
JFramew kodzie. - Przez dziedziczenie - projektując klasę rozszerzającą
JFrame.
Dostępne kontrolki (wybrane)
JButton- przyciskJLabel- etykieta tekstowaJTextField- pole tekstoweJTextArea- obszar tekstowyJCheckBox- pole wyboruJRadioButton- przycisk radiowyJComboBox- rozwijana listaJList- lista z możliwością wyboruJTable- tabelaJTree- drzewoJMenuiJMenuItem- menu i jego elementyJDialog- okno dialogoweJFileChooser- okno wyboru plikuJColorChooser- okno wyboru koloruJSlider- suwakJProgressBar- pasek postępuJTabbedPane- panel z zakładkamiJToolBar- pasek narzędziJScrollPane- kontener z paskami przewijaniaJOptionPane- okno dialogowe do komunikatów i prostych interakcjiJLabelJScrollBarJTextFieldJMenuItemJTextAreaJMenuJPasswordFieldJPopupMenuJCheckBox/JCheckBoxMenuItemJRadioButtonJSeparatorJComboBoxJProgressBarJTableJTreeJListJColorChooserJTabbedPane,JFrame,JSlider,JComponent,JSpinner,JLayeredPane,JDialog,JDesktopPane,JPanel,
JEditorPane, JFileChooser, JScrollPane, JToggleButton, JSplitPane, JToolBar, JTextPane, JViewport, JRootPane
Projektowanie interfejsu
Można pisać GUI ręcznie lub skorzystać z narzędzi graficznych (np. Swing UI Designer w IntelliJ IDEA).
Opis wyglądu formy zapisany jest w pliku .form (XML), a logika aplikacji w pliku .java. Ręczna edycja
pliku .form nie jest zalecana.
LayoutManagers
LayoutManager to interfejs implementowany przez klasy zarządzające układem komponentów. Popularne implementacje:
- java.awt.BorderLayout
- java.awt.FlowLayout
- java.awt.GridLayout
- java.awt.CardLayout
- java.awt.GridBagLayout
Dodatkowe layouty w Swing:
- javax.swing.BoxLayout
- javax.swing.GroupLayout
- javax.swing.ScrollPaneLayout
- javax.swing.SpringLayout
- javax.swing.ViewportLayout
Dokumentacja: LayoutManager (Java SE)
Najpopularniejsze menedżery układu:
BorderLayout- obszary: north, south, east, west, centerGridLayout- siatka prostokątnaFlowLayout- elementy w liniiBoxLayout- pionowo lub poziomoCardLayout- tylko jeden widoczny komponent (stronicowanie)GridBagLayout- siatka o nierównych rozmiarach (bardzo elastyczny)GroupLayout,SpringLayout,ScrollPaneLayout- specjalistyczne układy
DataBinding (dla zainteresowanych)
Swing, jako biblioteka kompatybilna z MVC, pozwala stosować mechanizmy Data Binding (one-way i two-way). IntelliJ IDEA oferuje kreator Data Bindingu; opis: JetBrains - Data Binding tutorial.
