Zajęcia 7. - Graficzne interfejsy użytkownika - Swing

Writing /home/grochu/public_html/wiki/data/cache/3/3642098c2e7ac2f20ac3afe3ecf9a21f.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/meta/zajecia/java_2026_1/08_swing_pa.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/7/75e079481936e0d8ade254ee02e13f30.i failed
Writing /home/grochu/public_html/wiki/data/meta/zajecia/java_2026_1/sidebar.meta failed
Writing /home/grochu/public_html/wiki/data/cache/3/3642098c2e7ac2f20ac3afe3ecf9a21f.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.

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>

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?

  1. Dla każdej platformy napisać aplikację natywną - dużo pracy.
  2. Stworzyć dobrze napisany backend dostępny na wielu platformach + frontend webowy (przeglądarka lub

opakowanie natywne) - szybsze i tańsze rozwiązanie.

114_1.jpg

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ć:

  1. Przez asocjację - tworząc obiekt JFrame w kodzie.
  2. Przez dziedziczenie - projektując klasę rozszerzającą JFrame.

Dostępne kontrolki (wybrane)

  • JButton - przycisk
  • JLabel - etykieta tekstowa
  • JTextField - pole tekstowe
  • JTextArea - obszar tekstowy
  • JCheckBox - pole wyboru
  • JRadioButton - przycisk radiowy
  • JComboBox - rozwijana lista
  • JList - lista z możliwością wyboru
  • JTable - tabela
  • JTree - drzewo
  • JMenu i JMenuItem - menu i jego elementy
  • JDialog - okno dialogowe
  • JFileChooser - okno wyboru pliku
  • JColorChooser - okno wyboru koloru
  • JSlider - suwak
  • JProgressBar - pasek postępu
  • JTabbedPane - panel z zakładkami
  • JToolBar - pasek narzędzi
  • JScrollPane - kontener z paskami przewijania
  • JOptionPane - okno dialogowe do komunikatów i prostych interakcji
  • JLabel
  • JScrollBar
  • JTextField
  • JMenuItem
  • JTextArea
  • JMenu
  • JPasswordField
  • JPopupMenu
  • JCheckBox / JCheckBoxMenuItem
  • JRadioButton
  • JSeparator
  • JComboBox
  • JProgressBar
  • JTable
  • JTree
  • JList
  • JColorChooser
  • JTabbedPane, 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, center
  • GridLayout - siatka prostokątna
  • FlowLayout - elementy w linii
  • BoxLayout - pionowo lub poziomo
  • CardLayout - 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.