Programowanie zdarzeniowe II. Biblioteka Swing Małgorzata Prolejko ZDA JA16Z03
Plan Struktura Swing Komponenty proste Ramki Kolejność warstw Zarządca układu Panele Komponenty złożone Okna dialogowe i wewnętrzne
Struktura Swing Elementy Swing dziedziczą po odpowiednich komponentach java.awt.* Są to kontenery, w których umieszcza się mniejsze elementy. JFrame ramka, okno programu JDialog okno dialogowe JWindow surowe okno, bez przycisków i wstępnego zachowania Window JApplet okienko aplikacji w przeglądarce Frame Dialog Object Component Container Panel JWindow Applet JComponent JFrame JDialog JApplet
Komponenty proste Wszystkie elementy znajdujące się w okienku dziedziczą po abstrakcyjnej klasie JComponent. Są to komponenty lekkie. JLabel AbstractButton J Pane Layered/Option/Split/ JToggleButton JButton JMenuItem JCheckBox JRadioButton JMenu Root/Scroll/Tabbed JComponent JLabel etykieta tekstowa lub obrazkowa JButton przycisk JTextField pole tekstowe JPanel kontener gromadzący J Bar Progress/Scroll/Tool/ Menu JTextComponent JTextField JTextArea JPasswordField JFormattedTextField J inne JPanel JEditorPane JTextPane
Komponenty proste https://docs.oracle.com/javase/tutorial/uiswing/components/componentlist.html JButton JCheckBox JRadioButton JComboBox JList JSlider JSpinner JTextField JPasswordField JLabel JMenu new JButton("JButton"); new JCheckBox("JCheckBox"); new JRadioButton("JRadioButton"); new JComboBox<String>( new String[] {"JComboBox","element 1","element 2"}); new JList<String>( new String[] {"JList","element 1","element 2"}); new JSlider(2,10); new JSpinner(); new JTextField("JTextField"); new JPasswordField("JPasswordField"); new JLabel("JLabel"); new JMenu("JMenu"); Package test5
Komponenty proste Dzięki dziedziczeniu wszystkich komponentów po JComponent każdy z nich ma dostęp do metod: (i wielu innych) int getwidth () int getheight () int getx() int gety () java.awt.graphics getgraphics() void setbackground (java.awt.color bg) void setenabled (boolean enabled) void setfont (java.awt.font font) void setforeground (java.awt.color fg) void settooltiptext(java.lang.string text) void setvisible (boolean visible) Długość w pikselach Wysokość w pikselach Współrzędna X lewego, górnego rogu Współrzędna Y lewego, górnego rogu Obiekt graficzny przynależny do komponentu, po którym można malować w celu zmiany wyglądu. Ustawia kolor tła Aktywuje/dezaktywuje Ustawia czcionkę dla tekstu wewnętrznego Ustawia kolor główny (np. tekstu) Ustawia tekst podpowiedzi Pokazuje/chowa
Dodawanie elementów GUI Ćwiczenie 3. Napisz program okienkowy zawierający przycisk, etykietę i pole tekstowe. Możesz dodać inne komponenty i je przetestować.
Ramki Struktura okienka zawiera kilka warstw ustawionych w hierarchię. JFrame okienko zawiera: JRootPane składa się z GlassPane wierzchnia warstwa domyślnie niewidoczna. Po włączeniu przechwytuje zdarzenia InputEvents. JLayeredPane warstwa posiadająca głębokość (z-order) ContentPane kontener na elementy okienka JMenuBar miejsce na menu ew. dodatkowe warstwy
Kolejność warstw W JLayeredPane oprócz domyślnej warstwy ContentPane można dodawać własne. Każda z dodanych warstw powinna otrzymać parametr mówiący o głębokości na której ma się dana warstwa znaleźć. Domyślnie do JLayeredPane dodawane są warstwy: -30000 FRAME_CONTENT_LAYER DEFAULT_LAYER PALETTE_LAYER MODAL_LAYER 0 POPUP_LAYER 100 200 DRAG_LAYER 300 400 Nazwa Warstwy Głębokość z-order FRAME_CONTENT_LAYER -30000 Głębokość dla ContentPane i MenuBar DEFAULT_LAYER 0 Domyślna głębokość jeżeli się nie ustali inaczej. PALETTE_LAYER 100 Tu dodaje się palety i przyborniki(toolbar) MODAL_LAYER 200 Głębokość wewnętrznych okienek POPUP_LAYER 300 Miejsce na wyskakujące okienka (Popup) DRAG_LAYER 400 Miejsce do przeniesienia komponentu podczas przesuwania go. Po skończonym działaniu komponent powinien wrócić na swoją warstwę.
Zarządca układu Elementy wstawiane są do kontenera za pomocą polecenia.add(). Nie mówi ono gdzie w okienku mają się one znajdować. Rozmieszczeniem elementów w oknie zajmuje się zarządca układu LayoutManager, którego można wybrać spośród predefiniowanych, lub utworzyć własny. Zarządca układu BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout Gridlayout GroupLayout SpringLayout opis Posiada pięć stref: górną dolną, prawą, lewą oraz środek. Przydaje się gdy chcemy korzystać z przyborników przypiętych do krawędzi okna. Ustawia elementy w rzędzie lub kolumnie zachowując ich maksymalny rozmiar. Pozwala zmieniać rodzaj układu w trakcie pracy. Działa podobnie do zakładek za pomocą wyboru, wybiera się komponenty do wyświetlenia. Umieszcza elementy jeden za drugim aż skończy się przestrzeń wtedy wstawia do następnej linii. Domyślny układ dla JPanel. Tworzy macierz/tabelę o zadanej liczbie wierszy i kolumn i pozwala umieszczać elementy zajmując wspólnie sąsiednie komórki. Tworzy macierz/tabelę o zadanej liczbie wierszy i kolumn, a do każdej komórki wstawia element. Ustawia elementy bazując na definicjach dla układu horyzontalnego i wertykalnego. Pozwala na definiowanie odległości między elementami.
Zarządca układu GroupLayout https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
Panele Wewnątrz ContentPane można dodawać kontenery grupujące elementy GUI. Najprostszym z nich jest JPanel. Nie ma on własnego wyglądu jedyne co robi to ustawia elementy zgodnie z własnym zarządcą układu wewnątrz swojego rozmiaru. JSplitPane pozwala na utworzenie dwóch paneli połączonych ze sobą suwakiem, dzięki któremu można regulować wielkość jednego panelu na rzecz drugiego. JTabbedPane jest panelem zakładkowym, co oznacza, że wiele takich paneli może zajmować całą przestrzeń, ale tylko jedna zakładka/panel jest aktywna i wyświetla swoją zawartość. JScrollPane to panel który może posiadać paski przewijania, dzięki czemu może pomieścić elementy zajmujące więcej przestrzeni niż rozmiar panelu.
Zarządca układu Napisz okienkowy program pozwalający na Ćwiczenie 4. ustawianie danych z wizytówki i wyświetlanie tych danych w osobnym panelu. Okienko ma być podzielone na dwie części: po lewej stronie wpisujemy w odpowiednie pola dane potrzebne do wizytówki a po prawej te dane powinny się pojawić po kliknięciu przycisku ok. Klasa danych Wizytowka http://wmii.uwm.edu.pl/~prolejko/javaee/classwork/wizytowka.java
Komponenty złożone Komponenty złożone to takie elementy GUI które mogą wyświetlać obiekty różnego typu oraz zależną od zaimplementowanych metod wyświetlania. JTree jest komponentem wyświetlającym obiekty ustawione w drzewo hierarchiczne. JList umieszcza pod sobą kolejne obiekty.
Okna dialogowe i okna wewnętrzne Okno dialogowe pozwala na szybkie oprogramowanie wyboru użytkownika, gdy trzeba decydować o czymś w programie. Okna wewnętrzne z wyglądem przypominają główne okno programu, ale w przeciwieństwie do niego okien wewnętrznych można dodać wiele. Najczęściej stosuje się je przy otwieraniu wewnątrz programu wielu plików/danych z plików.