~~NOCACHE~~ ~~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=1024x768~~ ===== 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. {{zajecia:java_2026_1:114_1.jpg}} **Hierarchia klas Swing** ==== Dokumentacja ==== [[https://docs.oracle.com/javase/10/docs/api/javax/swing/package-summary.html|javax.swing (Java SE)]] ==== 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 ''JFrame'' w kodzie. - 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: [[https://docs.oracle.com/javase/10/docs/api/java/awt/LayoutManager.html|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: [[https://www.jetbrains.com/help/idea/binding-the-form-and-components-to-code.html|JetBrains - Data Binding tutorial]].