10. Swing układanie i malowanie
|
|
- Wiktoria Kurowska
- 8 lat temu
- Przeglądów:
Transkrypt
1 10.1 Zarządzenie układem i malowanie kontenera 10.2 Klasa JComponent i malowanie komponentu 10.3 Wzorce projektowe Composite i Decorator 10.4 Wątek rozdziału zdarzeń W. Kasprzak: Programowanie zdarzeniowe Zarządzanie układem i malowanie kontenera 1) Zarządzanie układem komponentów w kontenerze PoniŜej podano 5 róŝnych układów komponentów. W czasie realizacji kontenera określane są rozmiary i połoŝenia komponentów. 6-ty menadŝer układu to CardLayout układ o charakterze zakładek. MenadŜerowie (zarządcy) układu: BorderLayout, GridLayout, FlowLayout, BoxLayout, GridBagLayout, CardLayout W. Kasprzak: Programowanie zdarzeniowe 10-2
2 KaŜdy kontener posiada domyślnego menadŝera układu : dla obiektów klasy JPanel jest nim FlowLayout ; dla paneli zawartości (głównych kontenerów w obiektach JApplet, JDialog i JFrame) jest nim BorderLayout. O zastosowanym menadŝerze układu powinniśmy decydować w chwili tworzenia obiektu klasy JPanel lub podczas dodawania komponentów do panelu zawartości. Zmianę menadŝera umoŝliwia metoda kontenera setlayout. Np. fragment kodu ustawiający menadŝera BorderLayout: JPanel pane = new JPanel(); pane.setlayout(new BorderLayout()); BorderLayout Posiada 5 obszarów przeznaczonych dla komponentów: North, South, East, West, Center. W. Kasprzak: Programowanie zdarzeniowe 10-3 BoxLayout Komponenty rozmieszczane są w kolumnie lub wierszu. Zachowane są maksymalne rozmiary komponentu i moŝliwe jest przyleganie komponentów. FlowLayout Wypełnia komponentami wiersze od lewej do prawej i kontynuje w razie potrzeby w dalszym wierszu. GridLayout Normalizuje rozmiary komponetów i wyświetla je w zadanej liczbie wierszy i kolumn. GridBagLayout UmoŜliwia elastyczny dobór rozmiarów wierszy i kolumn. W. Kasprzak: Programowanie zdarzeniowe 10-4
3 Preferowany rozmiar komponentu Na rzecz komponentu moŝliwe są wywołania metod: setminimumsize, setpreferredsize, setmaximumsize lub nadpisanie metod getminimumsize, getpreferredsize, getmaximumsize. Jedynie menadŝer BoxLayout zwraca uwagę na wymagany przez komponent maksymalny rozmiar. Preferowane połoŝenie komponentu Wywołania metod komponentu: setalignmentx, setalignmenty lub nadpisanie metod getalignmentx, getalignmenty. Jedynie menadŝer BoxLayout zwraca uwagę na wymagane przez komponent połoŝenie. W. Kasprzak: Programowanie zdarzeniowe 10-5 Przebieg ustalania rozmiaru i połoŝenia ramki JFrame Metoda pack() sprawia, Ŝe komponent klasy JFrame posiada preferowany rozmiar. 1. Preferowany rozmiar ramki wynika z dodania rozmiarów brzegu ramki do preferowanego rozmiaru komponentów bezpośrednio zawartych w ramce, czyli równa się sumie preferowanych rozmiarów panelu zawartości ramki ("content pane") i paska menu. 2. Zarządca układu dla "content pane" (zwykle jest nim BorderLayout) określa preferowany rozmiar tego "ukrytego" kontenera. ZaleŜy on od: rozmiarów brzegu panelu zawartości i od preferowanych rozmiarów komponentów, zawartych w tym panelu. Np. zarządca GridLayout stara się dopasować szerokość i wysokość kaŝdego zarządzanego komponentu do najszerszego i najwyŝszego z nich. 3. KaŜdy komponent podaje zarządcy układu swoje preferowane rozmiary lub zwraca rozmiar wynikający ze środowiska "look and feel". W. Kasprzak: Programowanie zdarzeniowe 10-6
4 4. Po wyznaczeniu rozmiarów komponentów, ustalany jest rozmiar ich kontenera i ten wynik propagowany jest w górę hierarchii komponentów. 2) Malowanie komponentów kontenera Zasady malowania komponentu 1. Proces wykreślania rozpoczyna się od najwyŝszego komponentu w hierarchii, który ma być malowany (po raz pierwszy lub odświeŝony). 2. Komponenty Swing-a domyślnie odświeŝają swój wygląd po modyfikacji. Np. w wyniku wywołania metody settext() komponent zostanie zmodyfikowany i ewentualnie zmienią się jego rozmiary. 3. Jeśli zmiana połoŝenia lub rozmiaru komponentu nie następuje automatycznie to moŝna ją wymusić metodą revalidate() a potem naleŝy wywołać repaint(). 4. Kod malowania wykonuje się w wątku rozdziału zdarzeń. 5. Malowanie jest podwójnie buforowane - najpierw wypełniany jest W. Kasprzak: Programowanie zdarzeniowe 10-7 "wirtualny bufor ekranu" i dopiero po zakończeniu malowania odbywa się opróŝnienie tego bufora i przesłanie jego zawartości do bufora ekranu. Metoda setopaque MoŜna przekazać do zarządcy malowania informację o tym, Ŝe komponent jest nieprzezroczysty - metodą setopaque(true) - co zwiększy efektywność procesu rysowania. Wprawdzie komponentom odpowiadają zawsze prostokątne obszary to jednak przezroczyste komponenty mogą mieć dowolny kształt, odsłaniając fragmenty przykrywanego komponentu. W. Kasprzak: Programowanie zdarzeniowe 10-8
5 Przykład. Dany jest interfejs uŝytkownika i tworząca go hierarchia kontenerów. Proces malowania powyŝszego graficznego interfejsu: 1. Kontener główny typu JFrame maluje się samodzielnie jako pierwszy. 2. Kontener "content pane" najpierw maluje tło - szary, jednorodny czworokąt. Następnie wzywa on zawarty w nim obiekt typu JPanel do malowania się. Zwróćmy uwagę na fakt, Ŝe panel zawartości powinien być nieprzezroczysty. PoniewaŜ JPanel jest nieprzezroczysty moŝna by go wykorzystać w roli "content pane", tzn. zamiast W. Kasprzak: Programowanie zdarzeniowe 10-9 content=frame.getcontentpanel() i content.add(panel) // dodania naszego panelu do content pane moglibyśmy ustawić content pane na nasz panel dzięki: setcontentpane(panel). 3. Kontener typu JPanel zawarty w content pane maluje najpierw swoje tło - szary, jednorodny prostokąt. Następnie maluje swój brzeg - jest on w tym przypadku typu EmptyBorder brzeg zwiększa preferowany rozmiar panelu. Na koniec panel wzywa "swoje" komponenty aby po kolei same "malowały się". 4. Komponent JButton maluje prostokątne tło (jeśli występuje) i następnie maluje swój tekst. Jeśli przycisk posiada aktualnie kontekst klawiatury to jego wygląd jest zmieniany zgodnie z przyjętym środowiskiem "look-and-feel". 5. Komponent JLabel maluje swoje tło i swój tekst. W. Kasprzak: Programowanie zdarzeniowe 10-10
6 10.2 Klasa JComponent i malowanie komponentu Bazowa klasa komponentów Swing-a to klasa JComponent, która dziedziczy z klasy Container, a ta z kolei dziedziczy z klasy Component. Klasa Component zapewnia wszystkie podstawowe funkcje komponentu od ustawiania ich wyglądu po malowanie i zdarzenia. Klasa Container wspomaga dodawanie komponentów do kontenera i zarządzanie rozkładem komponentów. 1) Cechy klasy JComponent Ustawianie wyglądu komponentu Metoda setborder umoŝliwia określenie brzegu komponentu. Inne metody pozwalają na ustawianie kolorów (setforeground, setbackground), czcionki (setfont), przezroczystości (setopaque) i kursora (setcursor). Malowanie komponentu Metoda główna paint nie jest jawnie wywoływana i nie moŝe być W. Kasprzak: Programowanie zdarzeniowe przesłaniana. Wywołuje ona metody paintcomponent, paintborder i paintchildren. Z nich jedynie metoda paintcomponent moŝe być przesłaniana i wtedy wyznacza ona własny kod uŝytkownika dla rysowania komponentu. Jawnie wywoływanymi metodami są teŝ: repaint (wymusza, aby całość lub część w podanym prostokącie obszaru komponentu została odmalowana), revalidate (wymusza ponowne obliczenie rozkładu dla kontenera komponentu i prowadzi do odpowiedniego odmalowania). Look and feel KaŜdy obiekt klasy JComponent posiada związany z nim obiekt klasy ComponentUI, który realizuje jego rysowanie, obsługę zdarzeń, wyznacza rozmiary, itp. Rodzaj obiektu ComponentUI specyfikowany jest niejawnie ustawieniem look and feel wynikającym z wykonania w programie metody UIManager.SetLookAndFeel. W. Kasprzak: Programowanie zdarzeniowe 10-12
7 Wspomaganie rozkładu komponentów Klasa Component posiadała metody pobierania wymagań komponentu, np. getminimumsize, getmaximumsize, getpreferredsize, getalignmenty i getalignmentx, a klasa JComponent dodaje do nich metody umoŝliwiające ustawianie tych własności setpreferredsize, setminimumsize, setmaximumsize, setalignmentx i setalignmenty. Istnieją teŝ metody do ustawiania i pobierania menadŝera układu komponentu (setlayout, getlayout) oraz ustawienia kierunku - zorientowania komponentu (applycomponentorientation). Zarządzanie hierarchią komponentów zawartych w kontenerze Metody dodające komponent do kontenera (add) i usuwające komponent z kontenera (remove). Metody informujące o hierarchii w kontenerze: getrootpane podaje kontener pełniący rolę root pane w kontenerze. getcomponentcount - podaje liczbę komponentów tego kontenera, getcomponent, getcomponents - pobiera jeden (o podanym indeksie) lub wszystkie komponenty tego kontenera, W. Kasprzak: Programowanie zdarzeniowe getparent - podaje bezpośredni kontener tego komponentu; gettoplevelancestor - pobiera główny kontener dla tego komponentu. Własności ustawiane przez uŝytkownika UŜytkownik moŝe określić własności (pary nazwa/obiekt ) dla kaŝdego obiektu klasy JComponent. Za ich pomocą moŝe on sterować przetwarzaniem danych swoich komponentów. Metody putclientproperty i getclientproperty słuŝą do nadawania wartości i pobierania wartości własnościom komponentu. Wspomaganie dostępu do stanu komponentu Szereg metod klasy JComponent umoŝliwia pobranie lub ustawianie stanu komponentu. Np. setname, getname, setenabled, isenabled, setvisible, isvisible, isshowing (sprawdza, czy komponent i jego kontener są namalowani na ekranie), settooltiptext. Wspomaganie dostępu do rozmiaru i połoŝenia komponentu Szereg metod pozwala na ustawianie i pobranie rozmiaru i połoŝenia: getwidth, getheight, getsize, setsize (pobierz aktualną szerokość wzgl. W. Kasprzak: Programowanie zdarzeniowe 10-14
8 wysokość komponentu w pikselach, pobierz wzgl. ustaw rozmiar komponentu), getx, gety, getbounds, setbounds (pobierz aktualną współrzędną x wzgl. y punktu odniesienia komponentu lub pobierz wzgl. ustaw połoŝenie obejmującego prostokąta komponentu, wszystko względem górnego lewego rogu przodka) getlocation, getlocationonscreen, setlocation (pobierz aktualne połoŝenie komponentu względem górnego lewego rogu przodka wzgl. ekranu lub ustaw to połoŝenie względne komponentu), getinsets (pobierz rozmiar brzegu komponentu). Obsługa zdarzeń Metody pozwalające zarejestrować lub wyrejestrować obiekt obsługi zdarzenia komponentu: dla przycisków myszy (addmouselistener, removemouselistener), ruchu myszy (addmousemotionlistener, removemousemotionlistener), klawiatury (addkeylistener, removekeylistener) i zdarzenia związane ze zmianą stanu komponentu ukrycia widoczności, przywrócenia W. Kasprzak: Programowanie zdarzeniowe widoczności, przesunięcia połoŝenia, zmiany rozmiarów, itd. (addcomponentlistener, removecomponentlistener). Wspomaganie mechanizmu drag and drop Istnieją metody wspomagające wymianę danych przez schowek systemowy lub mechanizm przeciągania komponentu drag and drop (settransferhandler, gettransferhandler) oraz sprawdzające czy dany punkt ekranu znajduje się wewnątrz obszaru komponentu (contains) albo jaki komponent najwyŝszego poziomu zawiera ten punkt (getcomponentat). Skróty klawiszy Akcje zdefiniowane dla komponentu mogą być aktywowane przyciśnięciami klawiszy, np. jeśli przycisk posiada aktualny kontekst klawiatury to naciśnięcie klawisza spacja jest równowaŝne z kliknięciem myszą. Związanie akcji z klawiszami następuje automatycznie dzięki mechanizmowi look and feel. W. Kasprzak: Programowanie zdarzeniowe 10-16
9 2) Malowanie komponentu W celu wymalowania siebie samego obiekt klasy JComponent korzysta z trzech metod, wywoływanych w następującej kolejności: paintcomponent główna metoda malowania domyślnie pierwsza czynność to odtwarzanie tła jeśli komponent jest nieprzezroczysty następnie ewentualny kod malowania stworzony przez programistę. paintborder nakazuje rysowanie siebie brzegowi komponentu (jeśli istnieje) ta metoda nie powinna być wywoływana lub przesłaniania. paintchildren - nakazuje rysowanie siebie komponentom-potomkom zawartym w danym kontenerze (jeśli istnieją) ta metoda nie powinna być wywoływana lub przesłaniania. PowyŜsze trzy metody są wołane w metodzie klasy JComponent - paint, która nie powinna być przesłaniana. Standardowa realizacja malowania komponentu Swinga (ale nie dla samej klasy JComponent) metodą paintcomponent w środowisku look- W. Kasprzak: Programowanie zdarzeniowe and-feel jest delegowana do pewnego obiektu (klasy ComponentUI), który realizuje następujące kroki: sprawdza, czy komponent jest nieprzezroczysty, jeśli tak, maluje tło całego obszaru komponentu, ewentualnie maluje elementy wynikające ze środowiska look-and-feel. Podwójne buforowanie zapewnia płynne rysowanie GUI na ekranie. Przykład. Ilustracja kolejności rysowania w kaŝdym komponencie dziedziczonym z klasy JComponent : 1. tło (jeśli nieprzezroczyste) 2. rysowanie według kodu uŝytkownika (jeśli występuje) 3. obramowanie (jeśli występuje) 4. zawarte komponenty (jeśli występują) W. Kasprzak: Programowanie zdarzeniowe 10-18
10 3) Metoda paintcomponent Przykład 10.1 Wizualizacja obrazu, o normalnym rozmiarze i rozciągniętego wszerz. class ImagePanel extends JPanel {... public void paintcomponent(graphics g) { super.paintcomponent(g); // Rysuj tło // Obraz o normalnym rozmiarze g.drawimage(image, 0, 0, this); // Rozmiar obrazu to 85 x 62 // Obraz rozciągnięty wszerz g.drawimage(image, 90, 0, 300, 62, this); W. Kasprzak: Programowanie zdarzeniowe W podanym przykładzie do rysowania tła wykorzystano paintcomponent z nadklasy. MoŜna teŝ jawnie w kodzie paintcomponent podać na początku sekwencję instrukcji: g.setcolor(getbackground()); g.fillrect(0, 0, getwidth(), getheight()); g.setcolor(getforeground()); Układ współrzędnych komponentu współrzędne całkowite z zakresu (0, 0) do (szerokość - 1, wysokość - 1). Ewentualne obramowanie zmniejsza obszar malowania komponentu. W. Kasprzak: Programowanie zdarzeniowe 10-20
11 Informację o komponencie uzyskujemy za pomocą metod: getwidth, getheight i getinsets (dla informacji o brzegu). Np. public void paintcomponent(graphics g) {... Insets insets = getinsets(); int currentwidth = getwidth() - insets.left - insets.right; int currentheight = getheight() - insets.top - insets.bottom;... W. Kasprzak: Programowanie zdarzeniowe ) Metoda repaint Argumenty metody repaint void repaint() - nakaz odmalowania całego obszaru komponentu. void repaint(int, int, int, int) nakaz odmalowania jedynie podanego obszaru prostokątnego w komponencie - X, Y, szerokość, wysokość. Przykład 10.2 Program obliczający obszar dla odmalowania. class SelectionArea extends JLabel {... public SelectionArea(ImageIcon image,...) { super(image); // Komponent wyświetla obraz // W obsłudze zdarzenia mouse-dragged : Rectangle totalrepaint = recttodraw.union(previousrectdrawn); W. Kasprzak: Programowanie zdarzeniowe 10-22
12 repaint(totalrepaint.x, totalrepaint.y, totalrepaint.width, totalrepaint.height);... public void paintcomponent(graphics g) { super.paintcomponent(g); // Maluje tło i obraz... // Maluje prostokąt na obrazie. g.setcolor(color.white); g.drawrect(recttodraw.x, recttodraw.y, recttodraw.width - 1, recttodraw.height - 1); Nad obrazem malowana jest ramka wybrana przez uŝytkownika. Tylko obszar komponentu odpowiadający tej ramce jest odmalowywany. Ten sam prostokąt przekazany do metody repaint odzwierciedlony jest w obiekcie Graphics przekazanym do metody paintcomponent. W. Kasprzak: Programowanie zdarzeniowe Metoda getclipbounds umoŝliwia pobranie malowanego obszaru: public void paintcomponent(graphics g) { Rectangle cliprect = g.getclipbounds(); if (cliprect!= null) { // punkt odniesienia = (cliprect.x, cliprect.y) // szerokość, wysokość = cliprect.width, cliprect.height else {... Obiekt Graphics Obiekt Graphics zawiera informacje (stan kontekstu graficznego kolor, czcionkę, obszar malowania) i metody potrzebne do malowania (np. drawimage, drawstring, drawrect, fillrect). Ustawianie i pobieranie kontekstu, np. getcolor, getfont, setcolor, setfont, setclip, getclipbounds. Po zredukowanym malowaniu naleŝy odtworzyć obszar malowania komponentu jeszcze w metodzie paintcomponent: W. Kasprzak: Programowanie zdarzeniowe 10-24
13 Rectangle oldclipbounds = g.getclipbounds(); Rectangle clipbounds = new Rectangle(...); g.setclip(clipbounds);...// Malowanie... g.setclip(oldclipbounds); // Odtworzenie obszaru malowania PowyŜsze wynika z faktu, Ŝe nie mamy pełnej kontroli nad obszarem malowania w programie: - wiele kolejnych wywołań repaint moŝe być połączonych w jedno wywołanie paintcomponent; - metoda paintcomponent moŝe być wołana przez domyślny system malowania, bez jawnego wołania w aplikacji repaint; np. pierwsza prezentacja GUI, odsłonięcie okna komponentu przez zabranie innego przesłaniającego okna. W. Kasprzak: Programowanie zdarzeniowe Wzorce projektowe Composite i Decorator 1) Wzorzec struktury Composite Composite jest wzorcem słuŝącym do reprezentacji struktur drzewiastych typu całość-część w taki sposób, aby sposób zarządzania strukturą nie zaleŝał od jej złoŝoności. Ten wzorzec jest implementowany w obiektowych bibliotekach AWT i Swing do realizacji struktury komponent kontener i do zarządzania jej wizualizacją. Z punktu widzenia obiektu-klienta wzorzec Composite umoŝliwia zarządzanie całością za pomocą wywołania operacji dla jednego obiektu korzenia drzewa. Niepotrzebna jest mu wiedza o rozmiarze drzewa, poniewaŝ wywołanie operacji (np. odmalowania kontenera) zostanie przekazane automatycznie do wszystkich jego elementów. Centralnym elementem wzorca jest interfejs Component, który reprezentuje dowolny obiekt w strukturze drzewiastej. Posiada on moŝliwości dodawania i usuwania swojego obiektu potomnego (oczywiście, takŝe typu Component) oraz odwołania się do wybranego potomka. Zawiera on takŝe metodę W. Kasprzak: Programowanie zdarzeniowe 10-26
14 operation(), którą naleŝy wykonać na kaŝdym węźle struktury. Interfejs Component posiada dwie implementacje: Leaf oraz Composite. Klasa Leaf reprezentuje obiekty, które nie posiadają potomków (czyli liście w strukturze), natomiast Composite jest dowolnym węzłem pośrednim. PoniewaŜ kaŝdy węzeł pośredni zarządza takŝe poddrzewem, którego jest korzeniem, dlatego metoda operation(), poza wykonaniem operacji W. Kasprzak: Programowanie zdarzeniowe specyficznych dla kaŝdego węzła, wywołuje swoje odpowiedniki w obiektach potomnych, w ten sposób propagując wywołanie. 2) Wzorzec struktury Decorator Celem wzorca jest umoŝliwienie dynamicznego dodawania funkcjonalności do obiektu. Stwarza on elastyczną alternatywę dla mechanizmu dziedziczenia klas. W. Kasprzak: Programowanie zdarzeniowe 10-28
15 Klient wysyła komunikat do obiektu Decorator, który przekazuje go obiektowi ConcreteComponent i wykonuje dodatkowe operacje ( dekoracje ). Component jest wspólnym interfejsem dla wszystkich klas, które moŝna dekorować. Implementują go zarówno klasa ConcreteComponent, która jest odpowiedzialna za podstawową funkcjonalność oferowaną klientowi, jak i dekoratory. KaŜdy dekorator posiada referencję (oznaczoną jako kompozycję, aby zaznaczyć obowiązkowość i siłę tej relacji) do innego obiektu Component, którym moŝe być ponownie dekorator lub ConcreteComponent. Otrzymując Ŝądanie wykonania określonej operacji, dekorator deleguje je do swojego wewnętrznego obiektu Component, a następnie wykonuje specyficzną dla siebie dodatkową funkcjonalność. Czyli dodanie do obiektu nowej funkcjonalności polega na utworzeniu dekoratora i przekazaniu mu tego obiektu. Kiedy kaŝdy dekorator (klasy ConcreteDecoratorA i ConcreteDecoratorB) W. Kasprzak: Programowanie zdarzeniowe dodaje do dekorowanego obiektu tylko jedną funkcję, wówczas dekorując obiekt wielokrotnie uzyskujemy efekt osiągnięcia Ŝądanej sumarycznej funkcjonalności. Pod względem typu udekorowany obiekt nie róŝni się od obiektu nieudekorowanego (klient widzi go przez interfejs Component), dlatego zastosowanie tego wzorca nie wymaga istotnych zmian w kodzie klienta. Obiekt ConcreteComponent, aby mógł uczestniczyć w tym wzorcu, musi definiować interfejs Component, którego alternatywną implementacją są dekoratory. WaŜne jest teŝ, aby dekoratory odpowiednio delegowały swoje metody do wewnętrznych obiektów typu Component. W. Kasprzak: Programowanie zdarzeniowe 10-30
16 10.4 Wątek rozdziału zdarzeń 1) "Event-dispatching thread" Kod obsługi zdarzeń wykonywany jest zawsze w jednym wątku, tzw. wątku rozdziału zdarzeń ("event-dispatching thread"). Dzięki temu Ŝadna obsługa zdarzenia w programie nie moŝe się rozpocząć zanim nie zakończy się obsługa poprzedniego zdarzenia. Np. kod metody actionperformed wykonuje się w wątku rozdziału zdarzeń. RównieŜ kod malowania komponentów na ekranie wykonuje się w tym unikalnym wątku rozdziału zdarzeń. Czyli odświeŝanie komponentu nie moŝe się odbyć dopóki wykonywana jest obsługa zdarzenia wcześniej zainicjalizowana niŝ nakaz odświeŝenia wyglądu komponentu GUI. Zasady współpracy programu z GUI Dla apletu naleŝy konstruować GUI w metodzie init( ). Dla aplikacji bezpieczne jest stosowanie następującego schematu: public class MyApplication { W. Kasprzak: Programowanie zdarzeniowe public static void main(string[] args) { JFrame f = new JFrame(...);...// Dodaj komponenty do ramki.. f.pack(); // Realizuj ramkę f.setvisible(true); // Wyświetl ramkę // Teraz nie konstruuj juŝ Ŝadnych elementów GUI. // Wszystkie operacje na GUI - np. settext, gettext, itd. // wykonywane są podczas obsługi zdarzeń, np. actionperformed().... Stosuj zasadę pojedynczego wątku "Po realizacji komponentu Swing-a kaŝdy kod w programie, który zaleŝy od stanu komponentu lub wpływa na zmianę stanu komponentu powinien być wykonywany w wątku rozdziału zdarzeń." Realizacja komponentu oznacza, Ŝe jest on przygotowany do namalowania go na ekranie. W. Kasprzak: Programowanie zdarzeniowe 10-32
17 Realizacja głównego okna nastąpi na skutek wywołania dla niego jednej z metod: setvisible(true), show(), pack(). Po realizacji okna jego komponenty są teŝ zrealizowane. Jeśli dodajemy komponent do zrealizowanego kontenera to automatycznie następuje realizacja tego komponentu. Pierwsza realizacja ramki zwykle polega na wywołaniu pack. Następnie ramka jest wyświetlana wywołaniem setvisible (lub show). Odstępstwa od zasady jednego wątku: Pewne metody w API są zabezpieczone przed wątkami mają wbudowaną synchronizację dostępu. GUI aplikacji moŝe być skonstruowany, zrealizowany i wyświetlony po raz pierwszy w głównym wątku. Przypomnijmy poprzedni przykład: public static void main(string[] args) { W. Kasprzak: Programowanie zdarzeniowe JFrame f = new JFrame(...);...// Dodaj komponenty do ramki... f.pack(); f.setvisible(true); // Dalej nie definiuj więcej GUI. W tym przykładzie GUI skonstruowano w głównym wątku. MoŜliwe jest bowiem skonstruowanie (ale nie wyświetlenie) GUI w dowolnym wątku, jeśli tylko nie ma w nim odwołań do (lub modyfikacji) juŝ "zrealizowanych" komponentów. Teoretycznie wywołanie setvisible nie jest zabezpieczone przed wątkami, gdyŝ komponenty zostały właśnie zrealizowane wywołaniem pack. Jednak jeśli program nie posiada jeszcze widocznego GUI, jest mało prawdopodobne, aby nastąpiło wywołanie paint zanim metoda setvisible powróci. GUI apletu moŝe być skonstruowany i wyświetlony w metodzie init. W. Kasprzak: Programowanie zdarzeniowe 10-34
18 Przeglądarki nie wołają paint dla apletu zanim nie wykonają się metody init i start. Dlatego bezpieczne jest skonstruowanie GUI w metodzie apletu init, jeśli tylko nie wywołuje się w niej show() lub setvisible(true) dla obiektu apletu. Metody klasy JComponent - repaint i revalidate - mogą być wołane z kaŝdego wątku. Te metody przekazują swoje wywołania do kolejki obsług dla wątku rozdziału zdarzeń. Listy z obserwatorami zdarzeń mogą być modyfikowane przez kaŝdy wątek - moŝna wszędzie wywołać metody addlistenertypelistener i removelistenertypelistener te operacje nie mają wpływu na aktualnie realizowany rozdział zdarzeń. W. Kasprzak: Programowanie zdarzeniowe ) Jak naleŝy wykonywać kod w wątku rozdziału zdarzeń? Operacje na GUI po jego inicjalizacji prowadzone są przez wątek rozdziału zdarzeń. Programy sterowane są zdarzeniami pochodzącymi od widocznych komponentów takich jak przyciski lub operacje myszą. Jednak są teŝ sytuacje, gdy program wykonuje operacje na GUI, które nie są inicjowane zdarzeniami. Oto przykłady takich sytuacji. - Program wykonuje dłuŝszą inicjalizację na raty Taki program zwykle tworzy i pokazuje "zaczątki" swojego GUI podczas inicjalizacji, a potem prowadzi zmianę i modyfikację swojego GUI. Uzupełniająca inicjalizacja nie powinna mieć miejsca w wątku rozdziału zdarzeń, gdyŝ blokowałaby przyjmowanie zdarzeń i odświeŝanie ekranu dla programu. - Programy, których GUI musi być zmodyfikowany w wyniku niestandardowych zdarzeń. W. Kasprzak: Programowanie zdarzeniowe 10-36
19 Np. metoda programu serwera moŝe zostać wywołana przez nieznany wątek wykonywany na innej maszynie. Jednak w celu modyfikacji GUI metoda ta powinna wywołać kod wykonywany w wątku rozdziału zdarzeń. 3) Asynchroniczne wywołania metod w wątku rozdziału zdarzeń Klasa SwingUtilities posiada 2 metody przeznaczone do współpracy programu z wątkiem rozdziału zdarzeń: invokelater Metoda spowoduje wykonanie zadanego kodu w wątku rozdziału zdarzeń. Metoda nie czeka na wykonanie się tego kodu lecz powraca natychmiast. invokeandwait Działa podobnie jak metoda invokelater ale czeka na wykonanie się zadanego kodu. W. Kasprzak: Programowanie zdarzeniowe Deklaracja metody invokelater( ) public static void invokelater(runnable dorun) Powoduje asynchroniczne wykonanie metody dorun.run() w wątku rozdziału zdarzeń, po wcześniejszym wykonaniu wszystkich oczekujących w kolejce metod obsługi zdarzeń. Ta metoda moŝe być teŝ wołana z samego wątku rozdziału zdarzeń. Za obsługę ewentualnych wyjątków zgłaszanych podczas wykonania zleconego zadania odpowiada wątek rozdziału zdarzeń. Przykład. Wywołanie zadania obiektu dohelloworld i wydruk komunikatu: Runnable dohelloworld = new Runnable() { public void run() { System.out.println("Hello World w " + Thread.currentThread()); ; SwingUtilities.invokeLater(doHelloWorld); // Wykonaj później System.out.println("Ten komunikat moŝe pojawić się wcześniej niŝ górny."); W. Kasprzak: Programowanie zdarzeniowe 10-38
20 Deklaracja metody invokeandwait( ) public static void invokeandwait(runnable dorun) throws InterruptedException, InvocationTargetException TakŜe ta metoda powoduje asynchroniczne wykonanie metody dorun.run() w wątku rozdziału zdarzeń, po wcześniejszym wykonaniu wszystkich oczekujących w kolejce metod obsługi zdarzeń. Jednak wołająca metoda zostaje zablokowana w oczekiwaniu na wykonanie się zleconego zadania. Metody invokeandwait() nie moŝna wywołać w wątku rozdziału zdarzeń. Przykład. Wywołanie metody invokeandwait() z nowo tworzonego wątku w aplikacji w celu wypisania napisu w wątku rozdziału zdarzeń, a następnie po powrocie metody następuje wypisanie pochodzące z nowego wątku aplikacji. final Runnable dohelloworld = new Runnable() { public void run() { System.out.println("Hello World w " + Thread.currentThread()); ; W. Kasprzak: Programowanie zdarzeniowe Thread appthread = new Thread() { public void run() { try { SwingUtilities.invokeAndWait(doHelloWorld); catch (Exception e) { e.printstacktrace(); System.out.println("Koniec w " + Thread.currentThread()); ; appthread.start(); Jeśli metoda run() wołanego obiektu implementującego Runnable zgłasza wyjątek nieobsługiwany przez wątek rozdziału zdarzeń to jest on zamieniany na wyjątek typu InvocationTargetException i przekazywany do obsługi przez wołający wątek. Wyjątek typu InterruptedException zgłaszany jest wtedy, gdy oczekiwanie naszego wątku na zakończenie się zleconego zadania zostaje przerwane. W. Kasprzak: Programowanie zdarzeniowe 10-40
Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń
Bardziej szczegółowoProgramowanie zdarzeniowe
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
Bardziej szczegółowoProgramowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006
Programowanie graficznego interfejsu użytkownika Wykład 8 Maciej Wołoszyn mailto:woloszyn@fatcat.ftj.agh.edu.pl 10 maja 2006 Spis treści 1 JFC/Swing 1 1.1 Prosty przykład.................................
Bardziej szczegółowoLABORATORIUM 7 Cel: 1_1
LABORATORIUM 7 Cel: Budowa klas z wykorzystaniem dziedziczenia oraz implementowania interfejsów. Wprowadzenie do trybu graficznego -cd. Animacje obiektów w trybie graficznym obsługa zdarzeń od klawiatury
Bardziej szczegółowoTworzenie elementów graficznych
Tworzenie elementów graficznych Elementy graficzne w Javie pozwalające tworzyć Graficzny Interfejs Użytkownika (GUI) możemy podzielić na dwie grupy: AWT (Abstract Window Toolkit) bibliotek klas służąca
Bardziej szczegółowoPodstawy Swing. Tomasz Borzyszkowski
Podstawy Swing Tomasz Borzyszkowski Wprowadzenie Już Java 1.0 zawierała bibliotekę AWT (Abstract Window Toolkit) służącą do oprogramowania GUI. Kolejne wersje Java również wspierały to rozwiązanie. Swing
Bardziej szczegółowoMateriał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com GUI-Swing Wstęp do tworzenia prostych aplikacji z interfejsem graficznym (GUI) przy pomocy Swing, rysowanie prostych
Bardziej szczegółowoProgramowanie zdarzeniowe
Programowanie zdarzeniowe I. Podstawy obsługi zdarzeń Małgorzata Prolejko ZDA JA16Z03 Plan Pojęcie zdarzenia Klasy i obiekty słuchaczy Rejestracja słuchaczy Obsługa naciśnięcia przycisku Rozpoznawanie
Bardziej szczegółowoWielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.
Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w
Bardziej szczegółowoWYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.
WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy
Bardziej szczegółowoWypożyczalnia VIDEO. Technologie obiektowe
Wypożyczalnia VIDEO Jest to program do obsługi wypożyczalni i wypożyczeń klientów. Głównym zadaniem programu jest zarządzanie wypożyczeniami i drukowanie potwierdzenia wypożyczenia oraz naliczenie punktów
Bardziej szczegółowoInformatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Interfejs GUI wysokiego poziomu Pojęcie
Bardziej szczegółowoProgramowanie graficznych interfejsów użytkownika
Programowanie obiektowe Programowanie graficznych interfejsów użytkownika Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Programowanie
Bardziej szczegółowoGrafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki
UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI Opracował: mgr inż. Przemysław Pardel, dr hab. Bogdan Kwolek v1.01 2010 Grafika i komunikacja człowiek komputer Laboratorium Część 1: Wstęp do grafiki ZAGADNIENIA
Bardziej szczegółowoInterfejsy w Java. Przetwarzanie równoległe. Wątki.
Informatyka I Interfejsy w Java. Przetwarzanie równoległe. Wątki. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Interfejsy w Java Pojęcie interfejsu w programowaniu Deklaracja
Bardziej szczegółowoJava - interfejs graficzny
Java - interfejs graficzny Pakiet Swing Pakiet Swing przygotował: pawel@kasprowski.pl Czym jest Swing? Rozszerzenie AWT (Abstract Windows Toolkit) do tworzenia GUI (Graphical User Interface) w Javie import
Bardziej szczegółowoJava biblioteka Swing
Java biblioteka Swing Podstawowe klasy Klasa JComponent Klasa JFrame Klasa JFrame Klasa bazowa dla okien Ważne właściwości: settitle ( ) setdefaultcloseoperation ( ) setsize ( ), setlocation ( ) setlayout
Bardziej szczegółowoSWING. dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com
SWING dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? Przykład aplikacji z GUI Zarządcy układu Obsługa zdarzeń Komponenty GUI Wprowadzenie obiektowy paradygmat do tworzenia
Bardziej szczegółowoMarcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science
Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Wszystkie komponenty są rozmieszczane przez domyślny
Bardziej szczegółowoPodstawy Języka Java
Podstawy Języka Java Wprowadzenie do AWT AWT Abstract Window Toolkit, biblioteka wykorzystywana do budowy graficznych interfejsów użytkownika w Javie AWT do obsługi elementów interfejsu użytkownika wykorzystuje
Bardziej szczegółowoWzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Bardziej szczegółowoKontenery i komponenty graficzne
JAVA Kontenery i komponenty graficzne Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Opracował: Andrzej Nowak Kontenery Aplikacja okienkowa składa
Bardziej szczegółowoProgramowanie obiektowe zastosowanie języka Java SE
Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z
Bardziej szczegółowoArchitektura interfejsu użytkownika
Uniwersytet Jagielloński Interfejsy graficzne Wykład 3 Architektura interfejsu użytkownika Barbara Strug 2011 Hall of shame Hall of Shame Hall of Fame O czym dzisiaj Model Widok- Kontroler Hierarchia widoków
Bardziej szczegółowoKlasy abstrakcyjne. Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract
Klasy abstrakcyjne Klasa abstrakcyjna jest to klasa której obiekty nie mogą być tworzone, może być natomiast dziedziczona. Może posiadać konstruktor, może on być jednak wywołany tylko przez klasy pochodne.
Bardziej szczegółowoProgramowanie Obiektowe GUI
Programowanie Obiektowe GUI Swing Celem ćwiczenia jest ilustracja wizualnego tworzenia graficznego interfejsu użytkownika opartego o bibliotekę Swing w środowisku NetBeans. Ponadto, ćwiczenie ma na celu
Bardziej szczegółowoKurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016
Wykład 4 23 marca 2016 Graficzny interfejs użytkownika - GUI W Javie możemy skorzystać z dwóch bibliotek do tworzenia graficznych interfejsów: AWT (Abstract Windowing Toolkit) podstawowa biblioteka będaca
Bardziej szczegółowoII Tworzenie klasy Prostokąt dziedziczącej z klasy wątku
INSTRUKCJA DO ĆWICZENIA 9 Animacja z wieloma wątkami Projekt1 Utwórz aplikację Swing, która umożliwi rysowanie na panelu 10 prostokątów o tej samej podstawie i losowych wysokościach, niezależnie zmieniających
Bardziej szczegółowoI Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu
I Tworzenie prezentacji za pomocą szablonu w programie Power-Point 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu 2. Po wybraniu szablonu ukaŝe się nam ekran jak poniŝej 3. Następnie
Bardziej szczegółowoProgramowanie w języku Java
Programowanie w języku Java Wykład 9: JFC/Swing projektowanie GUI Widok komponentów Java (Metal) MS Windows OSF/Motif GTK+ Programowanie w języku Java 2 1 Komponenty (1) Kontenery główne: JApplet JDialog
Bardziej szczegółowoProjektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
Bardziej szczegółowoLaboratorium z Grafiki InŜynierskiej CAD. Rozpoczęcie pracy z AutoCAD-em. Uruchomienie programu
Laboratorium z Grafiki InŜynierskiej CAD W przygotowaniu ćwiczeń wykorzystano m.in. następujące materiały: 1. Program AutoCAD 2010. 2. Graf J.: AutoCAD 14PL Ćwiczenia. Mikom 1998. 3. Kłosowski P., Grabowska
Bardziej szczegółowoJęzyk Java. Rysowanie GUI Określanie wyglądu komponentów
Język Java Rysowanie GUI Określanie wyglądu komponentów Rysowanie GUI Rysowanie GUI w Swingu np. przy pierwszym wyświetleniu przy ponownym odsłonięciu przy zmianach stanu programu Kolejność rysowania -
Bardziej szczegółowoJava Podstawy. Michał Bereta
Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego w ramach projektu Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych i propagowaniu
Bardziej szczegółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowoProgramowanie w Javie Wykład 6 Okienka w Javie (AWT)
Programowanie w Javie Wykład 6 Okienka w Javie (AWT) Płock 2014/2015 Wprowadzenie do AWT AWT Abstract Window Toolkit, wykorzystywany do budowy graficznych interfejsów użytkownika w Javie AWT do obsługi
Bardziej szczegółowoJęzyk JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy wykład 2, część 2 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa
Bardziej szczegółowoPWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub
PWŚG Ćwiczenia 13 Ukończoną pracę należy przesłać na adres email: sara.m.jurczyk@gmail.com lub sarajurczyk@kul.lublin.pl Zadanie. Stwórz aplikację stawiającą stemple w postaci figur geometrycznych: koło,
Bardziej szczegółowoAplikacja wielowątkowa prosty komunikator
Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host
Bardziej szczegółowoTEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Bardziej szczegółowoLaboratorium z informatyki sem.iii/ćw. 4 Wydział Transportu PW /19
INSTRUKCJA DO ĆWICZENIA 4 Utworzymy aplikacje umożliwiające oszacowanie szukanych wartości przez symulację doświadczenia losowego, z ilustracją graficzną wyników doświadczenia. Zadanie wykonamy dla przykładów
Bardziej szczegółowoJava niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika
Java niezbędnik programisty spotkanie nr 12 Graficzny interfejs użytkownika 1 Graphical User Interface (GUI) Abstract Window Toolkit Swing słabo się prezentuje mało obiektowy projekt i implementacja zajęły
Bardziej szczegółowo1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4
Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.
Bardziej szczegółowoJęzyk Java część 2 (przykładowa aplikacja)
Programowanie obiektowe Język Java część 2 (przykładowa aplikacja) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Java Java przykładowa
Bardziej szczegółowoJęzyk JAVA podstawy. Wykład 5, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 5, część 1 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do grafiki w Javie 2. Budowa GUI: komponenty, kontenery i układanie komponentów 3. Budowa GUI: obsługa
Bardziej szczegółowoApplety Java. Applety są przykładem kodu Java wykonywanego po stronie klienta, ale bez ujawnionej (jak w przypadku skryptu) wersji źródłowej
Applety Java Są to komponenty stron WWW o ukrytym kodzie Applety są pisane w zwykłej Javie i dlatego kompilowane do pliku(ów) *.class, a nie interpretowane jak skrypty w JavaScript Aby przeglądarka odtwarzała
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs
Bardziej szczegółowoBuilder (budowniczy) Cel: Przykład:
1/8 Builder (budowniczy) Cel: Oddzielenie konstruowania złożonego obiektu od jego reprezentacji, tak aby ten sam proces konstrukcji mógł tworzyć różne reprezentacje. Przykład: 2/8 abstract class TableBuilder
Bardziej szczegółowoProgramowanie na poziomie sprzętu. Programowanie w Windows API
Programowanie w Windows API Windows API Windows Application Programming Interface (API) to zestaw funkcji systemu operacyjnego Windows, które umożliwiają aplikacjom korzystanie z wszystkich usług systemu.
Bardziej szczegółowoWspółbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Bardziej szczegółowoAutor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1
Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego
Bardziej szczegółowoRysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)
Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit) Biblioteka Abstrakcyjnych Narzędzi Okienkowych AWT (Abstract Window Toolkit) jako historycznie pierwsza w JDK
Bardziej szczegółowoDodanie nowej formy do projektu polega na:
7 Tworzenie formy Forma jest podstawowym elementem dla tworzenia interfejsu użytkownika aplikacji systemu Windows. Umożliwia uruchomienie aplikacji, oraz komunikację z użytkownikiem aplikacji. W trakcie
Bardziej szczegółowoPHP 5 język obiektowy
PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje
Bardziej szczegółowoInformatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.
Kierunek: Informatyka i Ekonometria Przedmiot: Programowanie komputerów Forma zajęć: Ćwiczenia Temat: Tworzenie aplikacji z wykorzystaniem graficznego interfejsu użytkownika - Swing. Biblioteka SWING podstawowa
Bardziej szczegółowoKurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Bardziej szczegółowoDoskonalsze i nowe komponenty GUI
JFC (Swing) Doskonalsze i nowe komponenty GUI Kontenery najwyŝszego poziomu Aby pojawić się na ekranie kaŝdy komponent musi być częścią pewnej hierarchii zawierania (containment hierarchy). Hierarchia
Bardziej szczegółowoJava. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
Bardziej szczegółowoWykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz
Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoAplikacje internetowe i rozproszone - laboratorium
Aplikacje internetowe i rozproszone - laboratorium Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z technologią EJB w wersji 3.0, a w szczególności: implementacja komponentów sesyjnych,
Bardziej szczegółowoproblem w określonym kontekście siły istotę jego rozwiązania
Wzorzec projektowy Christopher Alexander: Wzorzec to sprawdzona koncepcja, która opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły, oraz podaje istotę jego
Bardziej szczegółowoPROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH
Animacja wielowątkowa - gra zręcznościowa. I. UTWORZENIE SZKIELETU APLIKACJI 1. Uruchom środowisko programowania NetBeans. Utwórz aplikację typu Swing tworząc projekt o nazwie Projekt10 2. Dodaj do projektu
Bardziej szczegółowoProgramowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków
Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................
Bardziej szczegółowoJava SE Laboratorium nr 5. Temat: Obsługa zdarzeń
Java SE Laboratorium nr 5 Temat: Obsługa zdarzeń 1 Obsługa zdarzeń 1. Definicja i idea Każda z aplikacji zmienia swój stan (reaguje) pod wpływem zdarzeń. Mogą to być zdarzenia generowane przez urządzenia
Bardziej szczegółowoKurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016
Wykład 6 7 kwietnia 2016 Klasa java.applet.applet Aplety w języku Java Aplety sa specyficznymi programami które moga być wyświetlane w oknach większości przegladarek internetowych. Klasa Applet rozszerza
Bardziej szczegółowoMarcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science
Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Abstract Window Toolkit Przekazuje tworzenie i
Bardziej szczegółowoPWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub
PWSG Ćwiczenia 12 Wszystkie ukończone zadania należy wysłać na adres: sara.m.jurczyk@gmail.com lub sarajurczyk@kul.lublin.pl Zadanie 1: Różnica między zwykłymi polami/metodami, a polami/metodami static
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe
Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie
Bardziej szczegółowoFormularz MS Word. 1. Projektowanie formularza. 2. Formularze do wypełniania w programie Word
Formularz MS Word Formularz to dokument o określonej strukturze, zawierający puste pola do wypełnienia, czyli pola formularza, w których wprowadza się informacje. Uzyskane informacje moŝna następnie zebrać
Bardziej szczegółowoSposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.
Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby
Bardziej szczegółowo4. W konstruktorze klasy Grafika wywołaj metodę określającą rozmiary ramki oraz ustaw kolor tła metodą setbackground():
INSTRUKCJA DO ĆWICZENIA 2 Aplikacja zawiera przykłady ilustrujące wybrane metody graficzne klasy Graphics (powtórzenie) oraz klasy Graphics2D. Tworzenie własnej klasy, tworzącej wieloboki o zadanym kształcie
Bardziej szczegółowoKompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i
Program szkolenia: Kompleksowe tworzenie aplikacji klasy Desktop z wykorzystaniem SWT i JFace Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Kompleksowe tworzenie aplikacji
Bardziej szczegółowoSTWORZENIE MODUŁU POBIERAJĄCEGO WEKTOROWE
LABORATORIUM SYSTEMÓW MOBILNYCH STWORZENIE MODUŁU POBIERAJĄCEGO WEKTOROWE DANE PRZESTRZENNE Z BAZY DANYCH I PRZYGOTOWUJĄCEGO JE DO WYŚWIETLENIA I. Temat ćwiczenia Stworzenie modułu przygotowującego dane
Bardziej szczegółowoGUI - projektowanie interfejsów cz. II
Katedra Inżynierii Wiedzy, Uniwersytet Ekonomiczny w Katowicach Wykład 3 Elementy Swing wszystkie elementy graficzne (przyciski, kontrolki) rysowane są od zera z poziomu Javy; ten sam wygląd i zachowanie
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 12: GUI. Aplety. 5/19/2013 S.Deniziak:Programowanie obiektowe 1 Pakiety graficzne w Javie AWT (Abstract Window Toolkit) Swing Java 1.1 Java 2.0 Java 2D Java 3D Java Media
Bardziej szczegółowoTworzenie prezentacji w MS PowerPoint
Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje
Bardziej szczegółowoDodawanie grafiki i obiektów
Dodawanie grafiki i obiektów Word nie jest edytorem obiektów graficznych, ale oferuje kilka opcji, dzięki którym można dokonywać niewielkich zmian w rysunku. W Wordzie możesz zmieniać rozmiar obiektu graficznego,
Bardziej szczegółowo5. Administracja kontami uŝytkowników
5. Administracja kontami uŝytkowników Windows XP, w porównaniu do systemów Windows 9x, znacznie poprawia bezpieczeństwo oraz zwiększa moŝliwości konfiguracji uprawnień poszczególnych uŝytkowników. Natomiast
Bardziej szczegółowoPOMOC / INSTRUKCJA OBSŁUGI
POMOC / INSTRUKCJA OBSŁUGI 1. Powiększanie mapy 2. Plakat 3. Schemat lekcji 4. Broszura informacyjna 5. Instrukcja obsługi Pasek narzędzi i menu wyboru Zmiana skali mapy Mini mapa - podgląd na położenie
Bardziej szczegółowoINSTRUKCJA DO ĆWICZENIA 5
INSTRUKCJA DO ĆWICZENIA 5 Kontynuacja tworzenia aplikacje umożliwiających oszacowanie szukanych wartości przez symulację doświadczenia losowego, z ilustracją graficzną jego wyników. Zadanie wykonamy dla
Bardziej szczegółowoUML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
Bardziej szczegółowoProjekt ZSWS. Instrukcja uŝytkowania narzędzia SAP Business Explorer Analyzer. 1 Uruchamianie programu i raportu. Tytuł: Strona: 1 z 31
Strona: 1 z 31 Explorer Analyzer 1 Uruchamianie programu i raportu PoniŜsze czynności uruchamiają program Bex Analyzer oraz wybrany raport z hurtowni danych. 1. uruchom z menu Start>Programy>Business Explorer>Analyzer
Bardziej szczegółowoDynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz
Dynamiczne i wydajne tworzenie interfejsu użytkownika Piotr Michałkiewicz Główne punkty prezentacji View i ViewGroup w kodzie OnClick() i Tag Space widget i GridLayout Dynamiczne dodawanie widgetów Animations
Bardziej szczegółowoAplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt
Bardziej szczegółowoAplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Graficzny Interfejs Użytkownika mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Spis treści Graficzny Interfejs
Bardziej szczegółowoInstrukcja obsługi programu Creative Fotos
Instrukcja obsługi programu Creative Fotos Aby pobrać program Creative Fotos naleŝy wejść na stronę www.fotokoda.pl lub www.kodakwgalerii.astral.pl i kliknąć na link Program do wykonania albumów fotograficznych.
Bardziej szczegółowoINSTRUKCJA OBSŁUGI SKLEPU INTERNETOWEGO. Alu System Plus Sp.J. ul.leśna 2d 32-500 Chrzanów, tel.(+48-32) 625-71-38 sprzedaz@alusystem.
INSTRUKCJA OBSŁUGI SKLEPU INTERNETOWEGO 1. Jak rozpocząć zakupy? Aby złoŝyć zamówienie w sklepie naleŝy zalogować się, klikając na linka Zaloguj w prawym górnym rogu ekranu. Następnie naleŝy podać nazwę
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć
Bardziej szczegółowoRozdział 7. Drukowanie
Rozdział 7. Drukowanie Ćwiczenia zawarte w tym rozdziale ułatwią zainstalowania w komputerze drukarki, prawidłowe jej skonfigurowanie i nadanie praw do drukowania poszczególnym uŝytkownikom. Baza sterowników
Bardziej szczegółowoProgramowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz
Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania
Bardziej szczegółowoDecorator (dekorator)
1/10 Decorator (dekorator) Cel: Dołącza dynamicznie nową funkcjonalność do obiektu elastyczna alternatywa dziedziczenia. Przykład: interface iplik { void zapisz(string tekst); String odczytaj(); class
Bardziej szczegółowoAplikacja wielow tkowa prosty komunikator
Aplikacja wielow tkowa prosty komunikator Klient 0 (host 1) W tek 0 Komponent serwera W tek pochodny 3.1 Klient 1 (host 2) W tek 1 Komponent serwera W tek pochodny 3.2 Host 4 Serwer W tek 3 Klient 2 (host
Bardziej szczegółowoSpis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4
Spis treści 1 Aplet 1 2 Od aplikacji do apletu 1 3 Budowa apletu 3 4 Cykl życia apletu 4 5 Aplet jako aplikacja 5 Temat: Aplety. Celem wykładu jest zdefiniowanie sieciowej aplikacji Java T M, zwanej apletem
Bardziej szczegółowoMultimedia JAVA. Historia
Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania
Bardziej szczegółowoCompas 2026 Vision Instrukcja obsługi do wersji 1.07
Compas 2026 Vision Instrukcja obsługi do wersji 1.07 1 2 Spis treści Integracja...5 1.Compas 2026 Lan...5 Logowanie...7 Użytkownicy...8 Raporty...10 Tworzenie wizualizacji Widoki...12 1.Zarządzanie widokami...12
Bardziej szczegółowo