Programowanie w języku Java WYKŁAD

Podobne dokumenty
Programowanie graficznych interfejsów użytkownika

Java - interfejs graficzny

Java biblioteka Swing

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie zdarzeniowe

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

Programowanie zdarzeniowe

Podstawy Języka Java

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Programowanie zdarzeniowe

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie obiektowe

Kontenery i komponenty graficzne

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

SWING. dr Jarosław Skaruz

Język JAVA podstawy. Wykład 5, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Klasy abstrakcyjne. Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract

setdefaultcloseoperation(jframe.exit_on_close);//obsługa zamykania aplikacji setvisible(true); } //wyświetlenie okna

Interfejs graczny w Javie.

Graphic User Interfaces pakiet Swing

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Podstawowe informacje o apletach

Kompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i

Java SE Laboratorium nr 5. Temat: Obsługa zdarzeń

GUI - projektowanie interfejsów cz. II

Obsługa zdarzeń. Wykład 4

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

Programowanie Obiektowe GUI

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

LABORATORIUM 7 Cel: 1_1

Programowanie graficznych interfejsów uŝytkownika

Tworzenie elementów graficznych

Architektura interfejsu użytkownika

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Podstawy Swing. Tomasz Borzyszkowski

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Tworzenie i obsługa graficznego interfejsu uŝytkownika

Języki Programowania II Wykład 7. Java Swing

Programowanie aplikacji na urządzenia mobilne

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Java Podstawy. Michał Bereta

Dodanie nowej formy do projektu polega na:

Programowanie w języku JAVA. Wykład IV Swing - GUI

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

PWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub

Kolory elementów. Kolory elementów

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Scenariusz Lekcji. Część organizacyjna:

Programowanie obiektowe

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

Programowanie Multimediów. Programowanie Multimediów JAVA. programowanie GUI. (AWT i Swing) [1]

Aplikacje w Javie wykład 12 Programowanie GUI

Aplikacje w środowisku Java

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Tworzenie prezentacji w MS PowerPoint

Tworzenie okna dialogowego w edytorze raportu SigmaNEST. część 1

Język Java część 2 (przykładowa aplikacja)

Wykład 12: Obsługa Zdarzeń

Dokumentacja do API Javy.

Programowanie w języku Java

Ćwiczenia 9 - Swing - część 1

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Stworzenie programu KSIĄŻKA ADRESOWA posiadającego funkcjonalności przechowywania danych o osobach dodanych przez użytkownika.

Spis treści 1. Wstęp Logowanie Główny interfejs aplikacji Ogólny opis interfejsu Poruszanie się po mapie...

Laboratorium 8 ( Android -pierwsza aplikacja)

Podstawowe kontrolki i ich obsługa

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

JavaFX. Zaawansowane technologie Javy 2019

16) Wprowadzenie do raportowania Rave

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Programowanie w środowisku graficznym- wykład 9 Programowanie GUI cz1

Programowanie obiektowe

Języki i metody programowania Java Obsługa zdarzeń - przykłady

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Programowanie obiektowe

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

POLIMORFIZM, INTERFEJSY, PROGRAMOWANIE ZDARZENIOWE

Zaawansowane programowanie obiektowe. Wykład 3 część 2

Laboratorium programowania urządzeń mobilnych

MS Excell 2007 Kurs podstawowy Filtrowanie raportu tabeli przestawnej

Wprowadzenie do projektu QualitySpy

1. Wstęp Niniejszy dokument jest instrukcją użytkownika dla aplikacji internetowej DM TrackMan.

Programowanie obiektowe

Dodawanie grafiki i obiektów

Oficyna Wydawnicza UNIMEX ebook z zabezpieczeniami DRM

Wykład 3: Projektowanie graficznych interfejsów użytkownika w Java

Pierwsza ramka. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 10

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.2/2015

Transkrypt:

Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 05.05.2014

WYKŁAD 11 GUI w Swing cz. 1 Wykład został w znacznej mierze oparty na: http://www.tutorialspoint.com/swing/

GUI

GUI Zakład Inżynierii Oprogramowania GUI = Graphical User Interface Może być związane: z aplikacją desktopową (nasz wykład) z aplikacją webową (inne przedmioty) Z punktu widzenia inżynierii oprogramowania opracowanie wymagań/architektury/projektu/implementacji/testów prace w projekcie informatycznym nad GUI związane są z tzw. user experience. Istnieją dobre praktyki związane z projektowaniem GUI. Oprócz ogólnych praktyk (kwestie techniczne) należy mieć na względzie fakt, że w różnych dziedzinach zastosowań mogą być różne zwyczaje.

GUI Zakład Inżynierii Oprogramowania Technologie służące wytwarzaniu GUI niezależnego od platformy dostępne w 2013 roku: QML Qt Juce Adobe Air Mono+GTK Java FX SWT

GUI Zakład Inżynierii Oprogramowania W ramach Java SE GUI może być realizowane w postaci aplikacji desktopowej zarządzanej bezpośrednio przez Window Manager danego systemu operacyjnego albo w postaci apletów zarządzanych przez przeglądarkę. Koncepcja apletów została jednak zdominowana przez bardziej dojrzałe technologie webowe, dlatego zostanie całkowicie pominięta w czasie wykładów.

GUI Zakład Inżynierii Oprogramowania Na kolejnym slajdzie pokazano kontekst działania GUI nawiązujący do rozwiązań znanych z Linuxa.

GUI Zakład Inżynierii Oprogramowania

GUI Zakład Inżynierii Oprogramowania Na kolejnym slajdzie pokazano strukturę okna w systemie okienkowym.

GUI Zakład Inżynierii Oprogramowania

GUI w Swing

GUI w Swing Zakład Inżynierii Oprogramowania Do niedawna uważano, że Swing jest wzorcowo zaprojektowaną biblioteką ilustrującą dobre praktyki stosowane w języku Java. Jednak są przeciwnicy tego podejścia/realizacji oraz trwają prace nad JavaFX biblioteką GUI mającą wkrótce (Java 9?) zastąpić bibliotekę Swing. W ramach wykładu omówimy Swing ze względu na następujące ograniczenia w Java FX: Braki w implementacji dostępnej w Java 7 Niedojrzałość jej implementacji w Java 8 Brak dostatecznego wsparcia narzędziowego Brak dostatecznego wsparcia społecznościowego (tutoriale, książki, fora dyskusyjne, )

GUI w Swing Zakład Inżynierii Oprogramowania Zalety biblioteki Swing: Sprzętowo przyspieszane wyświetlanie MVC Wykorzystanie technologii Java managed code Wsparcie przez środowiska deweloperskie projektowanie WYSIWYG, narzędzia testowania Wsparcie społecznościowe (por. rys)

GUI w Swing Zakład Inżynierii Oprogramowania

GUI w Swing Zakład Inżynierii Oprogramowania Wady biblioteki Swing w Java 7: Zdarzają się krytyczne błędy, które długo pozostają nierozwiązane (np. File.exists) Ograniczenia związane z Mac OS Konieczność umieszczania JRE w dystrybucji oprogramowania Ograniczenia implementacyjne związane z BufferedImage trudności z przyspiesznaiem sprzętowym, trudności z wyświetlaniem obiektów rastrowych BufferedImage Problemy z wyświetlaniem GUI przy dostępie przez VMware lub przez remote desktop

GUI w Swing Zakład Inżynierii Oprogramowania Przegląd Swing API stanowi zbiór rozszerzalnych komponentów GUI ułatwiających programiście implementację GUI aplikacji desktopowych. Biblioteka ta została skonstruowana na bazie AWT i stanowi jej nakładkę (wrapper). Komponenty Swing zostały opracowane zgodnie z wzorcem architektonicznym MVC i spełniają następujące założenia: Pojedyncze API zapewniające obsługę różnorodnych widoków Możliwość automatycznego generowania aplikacji z modelu Zorientowanie na wsparcie narzędziowe

GUI w Swing Zakład Inżynierii Oprogramowania Architektura MVC Architektura Swing API wspiera MVC następująco: Model reprezentuje dane komponentów. View reprezentuje widok danych komponentu. Controller pobiera dane od użytkownika z widoku i odzwierciedla zmiany w danych komponentu. Komponenty Swing mają Model jako osobny element a View i Controller należą do elementów GUI. Dzięki temu Swing jest łatwo rozszerzalny.

GUI w Swing Zakład Inżynierii Oprogramowania Cechy Swing Light Weight komponenty Swing są niezależne od natywnych API systemów operacyjnych ponieważ jego komponenty nie odwołują się wprost do API systemu operacyjnego. Rich controls - Swing dostarcza bogatego zbioru zaawansowanych kontrolek jak np. Tree, TabbedPane, slider, colorpicker, table controls Highly Customizable kontrolki Swing mogą być łatwo dostosowywane do potrzeb użytkownika gdyż ich wygląd jest niezależny od reprezentacji wewnętrznej. Pluggable look-and-feel wygląd aplikacji, których GUI oparte jest na Swing API może być zmieniany w czasie wykonania.

GUI w Swing Zakład Inżynierii Oprogramowania Kontrolki Swing Każde GUI uwzględnia następujące trzy aspekty: UI elements: Główne elementy wizualne dostępne dla użytkownika. Ich przykłady zostaną omówione dalej. Layouts: Określają jak poszczególne kontrolki powinny być położone na ekranie. Zagadnienie to zostanie omówione dalej. Behavior: Są związane ze zdarzeniami generowanymi przez użytkownika działającego na elementach GUI. Pozwalają obsługiwać zdarzenia w sposób asynchroniczny i wielowątkowy.

GUI w Swing Zakład Inżynierii Oprogramowania

GUI w Swing - komponenty Swing klasa Component Klasa Component jest bazową klasą abstrakcyjną dla kontrolek AWT nie będących elementami menu. Component reprezentuje obiekt mający reprezentację graficzną.

GUI w Swing - komponenty Swing - klasa Container Klasa Container jest nadklasą dla kontenerów AWT. Obiekt klasy Container może zawierać inne komponenty AWT.

GUI w Swing - komponenty Swing - klasa JComponent Klasa JComponent jest klasą bazową dla wszystkich komponentów Swing z wyjątkiem komponentów leżących najwyżej w hierarchii. Aby skorzystać z komponentu dziedziczącego z JComponent należy umieścić go w hierarchii kontenerów, której wierzchołkiem jest jeden z kontenerów Swing.

GUI w Swing - komponenty Swing klasa JLabel Klasa JLabel może wyświetlać tekst i/lub obraz. Zawartość obiektu Label może być pozycjonowana w pionie i w poziomie względem tego komponentu. Domyślnie jest wycentrowana w pionie. Etykiety tekstowe są domyślnie ustawione przy lewej krawędzi kontrolki, a graficzne są domyślnie wycentrowane.

GUI w Swing - komponenty Swing klasa JButton Klasa JButton stanowi implementację przycisku. Komponent ten ma etykietę (tekst i/lub grafika jak Label) i generuje zdarzenia w czasie wciskania.

GUI w Swing - komponenty Swing klasa JColorChooser Klasa JColorChooser dostarcza panelu kontrolek zaprojektowanych w celu umożliwienia użytkownikowi manipulowania kolorami i dokonywania wyboru koloru.

GUI w Swing - komponenty Swing JCheckBox Class Klasa JCheckBox jest implementacją check-boxu.

GUI w Swing - komponenty Swing - klasa JRadioButton Klasa JRadioButton jets implementacją radio-button.

GUI w Swing - komponenty Swing klasa JList Klasa JList jest komponentem wyświetlającym listę obiektów pozwalającą użytkownikowi wybrać jeden lub wiele z nich.

GUI w Swing - komponenty Swing klasa JComboBox Klasa JComboBox jest komponentem zawierającym przycisk lub pole edytowalne oraz listę rozwijaną dynamicznie.

GUI w Swing - komponenty Swing klasa JTextField Klasa JTextField jest komponentem pozwalającym na edytowanie pojedynczej linii tekstu.

GUI w Swing - komponenty Swing klasa JPasswordField Klasa JPasswordField jest komponentem dedykowanym do obsługi funkcjonalności hasła i pozwala na edytowanie pojedynczej linii tekstu maskując jego treść.

GUI w Swing - komponenty Swing klasa JTextArea Klasa JTextArea jest wieloliniowym obszarem do edycji tekstu.

GUI w Swing - komponenty Swing klasa ImageIcon Klasa ImageIcon jest implementacją interfejsu Icon wyświetlającego ikonę dla obrazu graficznego.

GUI w Swing - komponenty Swing klasa JScrollBar Klasa JScrollBar jest implementacją paska przewijania.

GUI w Swing - komponenty Swing klasa JOptionPane Klasa JOptionPane jest komponentem dostarczającym standardowych metod dla wyskakującego okienka dialogowego służącego poinformowaniu użytkownika o czymś.

GUI w Swing - komponenty Swing klasa JFileChooser Klasa JFileChooser jest komponentem dostarczającym użytkownikowi prostego mechanizmu wybierania pliku.

GUI w Swing - komponenty Swing klasa JProgressBar Klasa JProgressBar jest komponentem wyswietlającym postęp jakiegoś zadania.

GUI w Swing - komponenty Swing klasa JSlider Klasa JSlider jest komponentem pozwalającym użytkownikowi na graficzny wybór wartości za pomocą suwaka poruszającego się w określonym zakresie.

GUI w Swing - komponenty Swing klasa JSpinner Klasa JSpinner jest komponentem pozwalającym użytkownikowi na wybranie wartości parametru z uporządkowanej sekwencji wartości za pomocą strzałek przewijania lub za pomocą pola wejściowego.

GUI w Swing - zdarzenia SWING klasy Event Klasy Event reprezentują zdarzenia. Java dostarcza wielu różnych wyspecjalizowanych klas tej kategorii. Omówione zostaną przykładowe, najczęściej używane.

GUI w Swing - zdarzenia Klasa EventObject Jest to klasa bazowa, z której wyprowadzane są wszystkie klasy zdarzeń. Obiekty tych klas konstruowane są w taki sposób, aby źródło zdarzenia obiekt, w którym zdarzenie zostało zainicjowane było w nim reprezentowane za pomocą referencji do tego obiektu. Klasa ta jest zdefiniowana w pakiecie java.util.

GUI w Swing - zdarzenia SWING klasa AWTEvent Jest to klasa bazowa dla wszystkich zdarzeń AWT. Zastępuje ona klasy zdarzeń wywodzonych z klasy java.awt.event. Jest ona zdefiniowana w pakiecie java.awt. Za pomocą metody getid() można zidentyfikować typ zdarzenia.

GUI w Swing - zdarzenia SWING klasa ActionEvent Klasa ta jest zdefiniowana w pakiecie java.awt.event. Obiekt ActionEvent jest generowany gdy zostanie wciśnięty przycisk lub nastąpi kliknięcie lub podwójne kliknięcie na pozycji z listy.

GUI w Swing - zdarzenia SWING klasa InputEvent Klasa InputEvent jest klasą bazową dla wszystkich zdarzeń generowanych na poziomie komponentów. Zdarzenia wejściowe są dostarczane do Listener ów zanim zostaną obsłużone przez źródło, w którym powstały. Pozwala to na przejęcie kontroli nad wygenerowanym zdarzeniem przez Listener a lub podklasę komponentu zanim komponent źródłowy obsłuży je w sposób dla niego charakterystyczny. Np. przejęcie zdarzenia mousepressed wygenerowanego na komponencie przycisku Button pozwala zabezpieczyć obiekt klasy Button przed aktywowaniem go.

GUI w Swing - zdarzenia SWING klasa KeyEvent Obiekt tej klasy jest generowany w czasie wprowadzania z klawiatury znaku. Są trzy rodzaje takich zdarzeń reprezentowane za pomocą następujących stałych całkowitych: KEY_PRESSED KEY_RELASED KEY_TYPED

GUI w Swing - zdarzenia SWING klasa MouseEvent Zdarzenie to świadczy o wykonaniu czynności za pomocą myszy na komponencie. Jest ono generowane gdy: Zostanie wciśnięty przycisk myszy Zostanie zwolniony przycisk myszy Zostanie kliknięty (wciśnięty i zwolniony) przycisk myszy Kursor myszy wejdzie w obszar komponentu Kursor myszy znajduje się w obszarze komponentu Mysz zostanie poruszona Przycisk myszy zostanie wciśnięty i przytrzymany

GUI w Swing - zdarzenia SWING klasa WindowEvent Obiekt tej klasy reprezentuje zmianę stanu okna. Zdarzenie to jest generowane w przypadku otwarcia, zamknięcia, aktywacji, dezaktywacji, zwinięcia, rozwinięcia, uzyskania lub utraty fokusu.

GUI w Swing - zdarzenia SWING klasa AdjustmentEvent Klasa AdjustmentEvent reprezentuje zdarzenie zmiany rozmiaru generowane przez komponenty mogące zmieniać rozmiar (nie wszystkie).

GUI w Swing - zdarzenia SWING - klasa ComponentEvent Klasa ComponentEvent reprezentuje zdarzenia generowane gdy komponent zostanie przesunięty, zmieni rozmiar lub widoczność (zostanie ukryty lub odsłonięty).

GUI w Swing - zdarzenia SWING klasa ContainerEvent Klasa ContainerEvent reprezentuje zdarzenie informujące o zmianie zawartości kontenera związane z dodaniem do niego lub usunięciem z niego komponentu.

GUI w Swing - zdarzenia SWING interfejs MouseMotionEvent Interfejs MouseMotionEvent świadczy o czynności myszy wykonanej na komponencie. Zdarzenie takie jest generowane przez komponent gdy mysz zostanie przesunięta lub wciśnięta nad nim.

GUI w Swing - zdarzenia SWING klasa PaintEvent Klasa PaintEvent jest używana do zapewnienia skolejkowania wywołań metody paint/update wraz z innymi zdarzeniami dostarczanymi z kolejki zdarzeń.

GUI w Swing obsługa zdarzeń SWING klasy Event Listeners Event listener reprezentuje interfejsy odpowiedzialne za obsługę zdarzeń. Java dostarcza wielu klas Event listener ów tutaj zostaną pokazana najczęściej wykorzystywane. Każda metoda event listener a ma jeden argument będący odpowiednią podklasą klasy EventObject. Np. metody klasy będącej mouse event listener em przyjmują jako argument obiekty klasy MouseEvent, gdzie MouseEvent dziedziczy z klasy EventObject.

GUI w Swing obsługa zdarzeń Interfejs EventListner Jest to interfejs, który musi być rozszerzany przez każdy interfejs event listenera.definicja tego interfejsu znajduje się w pakiecie java.util.

GUI w Swing obsługa zdarzeń SWING interfejs ActionListener Musi być implementowany przez każdą klasę przetwarzającą ActionEvent. Obiekt tej klasy musi być zarejestrowany w komponencie. Można tego dokonać za pomocą metody addactionlistener(). Kiedy powstanie action event, wtedy zostanie wywołana metoda actionperformed() obiektu.

GUI w Swing obsługa zdarzeń SWING interfejs ComponentListener Powinna go implementować klasa, która przetwarza ComponentEvent. Obiekt tej klasy musi zostać zarejestrowany w komponencie. Można tego dokonać za pomocą metody addcomponentlistener(). Zdarzenia component event są generowane jedynie dla celów informacyjnych.

GUI w Swing obsługa zdarzeń SWING interfejs ItemListener Powinien zostać zaimplementowany przez klasę przetwarzającą ItemEvent. Obiekt tej klasy musi zostać zarejestrowany w komponencie. Można tego dokonać za pomocą metody additemlistener(). Gdy pojawi się action event, wtedy zostanie wywołana metoda itemstatechanged() obiektu.

GUI w Swing obsługa zdarzeń SWING interfejs KeyListener Powinien zostać zaimplementowany przez klasę przetwarzającą KeyEvent. Obiekt tej klasy musi zostać zarejestrowany w komponencie. Można tego dokonać za pomocą metody addkeylistener().

GUI w Swing obsługa zdarzeń SWING interfejs MouseListener Klasa przetwarzająca MouseEvent powinna implementować ten interfejs. Obiekt tej klasy musi zostać zaimplementowany w komponencie. Można tego dokonać za pomocą metody addmouselistener().

GUI w Swing obsługa zdarzeń SWING interfejs WindowListener Klasa przetwarzająca WindowEvent powinna implementować ten interfejs. Obiekt tej klasy musi zostać zarejestrowany w komponencie. Można tego dokonać za pomocą metody addwindowlistener().

GUI w Swing obsługa zdarzeń SWING interfejs AdjustmentListener Interfejs AdjustmentListener jest używany do odbierania zdarzeń dopasowania (adjustment events). Klasa przetwarzająca te zdarzenia musi implementować ten interfejs.

GUI w Swing obsługa zdarzeń SWING interfejs ContainerListener Interfejs ContainerListener jest używany do odbierania zdarzeń container events. Klasa przetwarzająca te zdarzenia musi implementować ten interfejs.

GUI w Swing obsługa zdarzeń SWING interfejs MouseMotionListener Interfejs MouseMotionListener jest używany do odbierania zdarzeń mouse motion events generowanych na komponencie. Klasa przetwarzająca te zdarzenia musi implementować ten interfejs.

GUI w Swing obsługa zdarzeń SWING interfejs FocusListener Interfejs FocusListener jest używany do odbierania zdarzeń focus events. Klasa przetwarzająca te zdarzenia musi implementować ten interfejs.

GUI w Swing obsługa zdarzeń Adaptery SWING Event Adapters Adaptery są klasami abstrakcyjnymi służącymi odbieraniu różnych zdarzeń. Metody w tych klasach są puste. Klasy te służą jako Utility Classes do tworzenia obiektów listener ów.

GUI w Swing obsługa zdarzeń SWING klasa FocusAdapter Klasa FocusAdapter jest abstrakcyjną klasą adaptera do odbierania zdarzeń focus events.

GUI w Swing obsługa zdarzeń SWING klasa KeyAdapter Klasa KeyAdapter jest klasą abstrakcyjną adaptera służącą odbieraniu zdarzeń keyboard events.

GUI w Swing obsługa zdarzeń SWING klasa MouseAdapter Klasa MouseAdapter jest abstrakcyjną klasą adaptera do odbierania zdarzeń mouse events.

GUI w Swing obsługa zdarzeń SWING klasa MouseMotionAdapter Klasa MouseMotionAdapter jest klasą abstrakcyjną adaptera do odbierania zdarzeń mouse motion events.

GUI w Swing obsługa zdarzeń SWING klasa WindowAdapter Klasa WindowAdapter jest abstrakcyjną klasą adaptera do odbierania zdarzeń window events.

GUI w Swing - layout SWING Layouts Layout oznacza ułożenie komponentów w kontenerze w określonych pozycjach. Zadanie układania komponentów realizowane jest automatycznie przez Layout Manager.

GUI w Swing - layout Layout Manager Automatycznie rozmieszcza wszystkie komponenty w kontenerze. Jeśli go nie określimy, to jest używany domyślny. Ręcznie nie opłaca się implementować jego funkcjonalności jest to trudne z następujących powodów: Obsłużenie dużej ilości kontrolek w kontenerze jest trudne Zwykle nie dysponujemy informacją o rozmiarach komponentu wtedy gdy chcemy go odpowiednio umieścić w kontenerze. Swing dostarcza wielu klas layout manager. Obsługują one również skutki zmiany rozmiaru okna kontenera rozmieszczając ponownie w nim komponenty. Z każdą instancją klasycontainer skojarzony jest obiekt layout managera. Każda klasa layout managera musi implementować interfejs LayoutManager.

GUI w Swing - layout SWING iterfejs LayoutManage Interfejs LayoutManager jest używany do definiowania interfejsu klas wiedzących jak rozmieszczać komponenty w kontenerach.

GUI w Swing - layout SWING interfejs LayoutManager2 Interfejs LayoutManger jest używany do definiowania interfejsu dla klas wiedzących jak rozmieszczą komponenty w kontenerach w oparciu o obiekt layout constraints.

GUI w Swing - layout SWING klasa BorderLayout Klasa BorderLayout rozmieszcza komponenty tak aby ulokować je w pięciu regionach: east, west, north, south i center. Każdy region może zawierać tylko jeden komponent i każdy komponent jest identyfikowany za pomocą odpowiedniej stałej NORTH, SOUTH, EAST, WEST i CENTER.

GUI w Swing - layout SWING klasa CardLayout Klasa CardLayout rozmieszcza każdy komponent w kontenerze jako kartę. Wdanej chwili może być widoczna tylko jedna karta i kontener jest wykorzystywany jako stos kart.

GUI w Swing - layout SWING klasa FlowLayout Klasa FlowLayout rozmieszcza komponenty od lewej strony do prawej.

GUI w Swing - layout SWING klasa GridLayout Klasa GridLayout rozmieszcza komponenty w siatce prostokątnej.

GUI w Swing - layout SWING klasa GridBagLayout Klasa GridBagLayout rozmieszcza komponenty horyzontalnie i wertykalnie.

GUI w Swing - layout SWING klasa GroupLayout Klasa GroupLayout grupuje komponenty hierarchicznie.

GUI w Swing - layout SWING klasa SpringLayout Klasa SpringLayout rozmieszcza komponenty na podstawie zbioru ograniczeń (constraints).

GUI w Swing - menu Klasy SWING Menu Każde główne okno aplikacji ma w górnej części skojarzony z nim pasek menu. Pasek menu składa się z wielu pozycji dostępnych dla użytkownika aplikacji. Ponadto każdy wybór może zawierać listę opcji zwanych drop down menu. Kontrolki Menu i MenuItem są podklasami MenuComponent.

GUI w Swing - menu

GUI w Swing - menu SWING klasa JMenuBar Klasa JMenuBar dostarcza implementacji paska menu.

GUI w Swing - menu SWING klasa JMenuItem Klasa JMenuItem reprezentuje pozycję w menu. Wszystkie pozycje w menu powinny dziedziczyć z klasy JMenuItem lub z jednej z jej podklas. Domyślnie skojarzona jest z etykietą.

GUI w Swing - menu SWING klasa JMenu Klasa Menu reprezentuje element menu rozwijany z poziomu paska menu.

GUI w Swing - menu SWING klasa JCheckboxMenuItem Klasa JCheckboxMenuItem reprezentuje check-box, który może znajdować się w menu. Wybranie check-box a w menu zmienia stan kontrolki z on na off albo z off na on.

GUI w Swing - menu SWING klasa JRadioButtonMenuItem Klasa JRadioButtonMenuItem reprezentuje radio-button, który może zostać umieszczony w menu. Wybranie radio-button w menu zmienia stan kontrolki z on na off albo z off na on.

GUI w Swing - menu SWING klasa JPopupMenu Klasa ta reprezentuje menu rozwijane dynamicznie w określonej pozycji komponentu.

GUI w Swing - kontenery Kontenery SWING Kontenery są integralną częścią komponentów GUI w SWING. Kontener dostarcza miejsca, w którym może znaleźć się komponent. Container w AWT jest komponentem pozwalającym na dodawanie do niego komponentów. Warto zwrócić uwagę na następujące własności kontenerów: Podklasy Container są nazywane kontenerami. Np. JPanel, JFrame i JWindow. Kontener może zawierać jedynie komponenty. Z każdym kontenerem związany jest charakterystyczny dla niego domyślny layout. Może on zostać zmieniony za pomocą przeciążonej metody setlayout().

GUI w Swing - kontenery SWING klasa JPanel Klasa JPanel jest ogólnym lekkim kontenerem.

GUI w Swing - kontenery SWING klasa JFrame Klasa JFrame jest rozszerzeniem klasy java.awt.frame wprowadzającą do niej wsparcie dla komponentowej architektury JFC/Swing.

GUI w Swing - kontenery SWING klasa JWindow Klasa JWindow jest kontenerem, który może zostać wyświetlony ale nie zawiera paska tytułu ani przycisków zarządzania oknem.

GUI w Swing Zakład Inżynierii Oprogramowania Dobre praktyki w Swing: Każde okno powinno rozszerzać JFrame albo JDialog (w zależności od typu okna). Ułatwia to zarządzanie własnościami okna bez konieczności odwoływania się do konkretnego obiektu jego podklasy.. Metoda main() powinna zostać umieszczona w osobnej klasie. Zwiększa to prawdopodobieństwo ponownego wykorzystania okna. Listener y powinny być implementowane w anonimowych klasach wewnętrznych w Java 7 lub za pomocą wyrażeń lambda w Java 8. Klasa główna nie powinna implementować żadnego listenera. Chroni to przed atakiem polegającym na przechwytywaniu komunikatów poza obiektem, z którym są one skojarzone.

GUI w Swing Zakład Inżynierii Oprogramowania Klasy GridBagLayout należy używać ostrożnie. Jest to bardzo bogaty Layout Manager, chociaż trudny do opanowania. Klasy JPanel należy używać ostrożnie. Należy najpierw zastanowić się, które komponenty powinny zmienić swój rozmiar wraz ze zmianą rozmiaru okna a następnie zgrupować te komponenty w JPanel. Czasem wymaga to zagnieżdżania w sobie obiektów klasy JPanel. Zawsze należy zaczynać od utworzenia wątku dispatchera zdarzeń. Najpierw należy wywołać metodę pack() potem dopasować rozmiar ramki a dopiero potem wywołać metodę setvisible(). Warto rozważyć użycie metody getmaximumwindowbounds(): GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); Rectangle bounds = env.getmaximumwindowbounds();

GUI w Swing Zakład Inżynierii Oprogramowania Przykład zastosowania powyższych dobrych praktyk public class Main { } public static void main(string[] args) { } final String text = args[0]; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { } }); final MyWindow wnd = new MyWindow(text); wnd.setvisible(true);

GUI w Swing Zakład Inżynierii Oprogramowania public class MyWindow extends JFrame { public MyWindow(String text) { super("my Window"); setdefaultcloseoperation(windowconstants.do_nothing_on_close); addwindowlistener(new WindowAdapter() { @Override public void windowclosing(windowevent e) { MyWindow.this.setVisible(false); MyWindow.this.dispose(); } }); final JButton btn = new JButton(text); btn.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent e) { JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE); } }); setlayout(new FlowLayout()); add(btn); pack(); } }

Koniec