8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ



Podobné dokumenty
Aplikace s grafickým uživatelským rozhraním

Seznámení s AWT: práce s okny, grafikou a textem

Java aplety. Předávání parametrů z HTML

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

Java - Kresba. 2/28/11 1/8 Java - kresba

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

2 Grafický výstup s využitím knihovny

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

GUI v Javě a událostmi řízené programování

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

GUI v Javě a událostmi řízené programování

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

GUI v Javě. GUI v Javě GUI komponenty a kontejnery Dialogová okna Události a obsluha událostí z GUI

GUI v Javě a událostmi řízené programování

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Generické programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Java - výjimky. private void vstup() throws IOException {... }

Z. Kotala, P. Toman: Java ( Obsah )

2 Tvorba interaktivních grafických programů

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Java a XML. 10/26/09 1/7 Java a XML

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

Jazyk C# (seminář 9)

Algoritmizace a programování

Algoritmizace a programování

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

TÉMATICKÝ OKRUH Softwarové inženýrství

Práce se soubory v Javě

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

IRAE 07/08 Přednáška č. 7. Začátek (head)

SWT & MigLayout. Alternativy Java GUI v praxi. Pavel Janečka & Tomáš Chlouba. červen 2011

Programování v Javě I. Únor 2009

Obrázek 6.14: Prohlížec nápovedy

Programátorská příručka

UNIVERZITA PARDUBICE

Programování v Javě I. Leden 2008

RMI Remote Method Invocation

Abstraktní třída a rozhraní

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

Část I Příklad - Generické typy, iterátor

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

KTE / ZPE Informační technologie

GUI. Systémová integrace pro desktopové aplikace

3 KTE / ZPE Informační technologie

7 Jazyk UML (Unified Modeling Language)

Úvod do programovacích jazyků (Java)

Část I Příklad - Generické typy, iterátor

JAVA JavaBeans Java, letní semestr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7 Jazyk UML (Unified Modeling Language)

1. Programování proti rozhraní

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Uživatelská rozhraní 10. cvičení. Martin Němec A

Základy objektové orientace I. Únor 2010

20. Projekt Domácí mediotéka

1. Dědičnost a polymorfismus

GUI (Graphical User Interface)

Seminář Java II p.1/43

Projekt Obrázek strana 135

Změna vlastností kódem

Návrhový vzor Factory v JAVA API

Úvod do počítačových sítí

Soubor jako posloupnost bytů

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

Abstraktní datové typy: zásobník

Chain of responsibility

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

1. Téma 12 - Textové soubory a výjimky

PŘETĚŽOVÁNÍ OPERÁTORŮ

Abstract Factory úvod

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

Příručka pro aplikaci KSnapshot

Programovací jazyk Java

OPERAČNÍ SYSTÉM. základní ovládání. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

8. Grafické uživatelské rozhraní

Úvod do programování - Java. Cvičení č.4

Principy objektově orientovaného programování

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

boolean hasnext() Object next() void remove() Kolekce

Projekty pro výuku programování v jazyce Java

Jazyk C# (seminář 7)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

PŘÍLOHY SEZNAM PŘÍLOH:

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

JAVA GUI Java, zimní semestr

JAVA Unit testing Java, zimní semestr

Transkript:

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ Abstract Window Toolkit (AWT) je část Java Core API, kterou tvoří balíky: java.awt, java.awt.event (od JDK 1.1), java.awt.image, java.awt.datatransfer (od JDK 1.1). AWT umožňuje tvorbu grafického uživatelského rozhraní (GUI), tj. práci se vstupy a výstupy v graficky orientovaných systémech (Windows 95/NT, X Window). Programy využívající AWT jsou v duchu jazyka Java plně přenositelné, ale zároveň je ovládání a vzhled jednotlivých prvků GUI, komponent, přizpůsobeno zvyklostem konkrétního systému. KOMPONENTY GUI programu tvoří komponenty. Strom tříd komponent v java.awt vypadá takto: Component o Button o Canvas o Checkbox o Container Panel java.applet.applet ScrollPane Window Frame o Label o List o Scrollbar o TextComponent TextArea TextField Dialog o FileDialog Nejdůležitější jsou rodičovské třídy komponent a kontejnerů: Abstraktní třída Component definuje metody pro zobrazení grafické komponenty a zpracování a zasílání událostí. Abstraktní třída Container definuje metody pro přidávání, odebírání a manipulaci s komponentami - instance potomků této třídy mohou vlastnit další komponenty.

Způsob rozložení komponent v kontejneru určují layout managery - instance tříd:borderlayout, CardLayout, FlowLayout, GridBagLayout,GridBagConst raints, GridLayout. Samozřejmě je možné si navrhnout vlastní manažer. Činnost programu využívajícího komponenty je následující: program vytvoří kontejner, do kterého následně může přidávat další komponenty. Při vykreslování se postupuje shora dolů; pořadí vykreslování komponent na stejné úrovni není definováno. Program reaguje na pokyny uživatele tím, že jednotlivé komponenty zachycují události (vstupy z klávesnice a myši) a na základě nich se vykonává další činnost. ZPRACOVÁNÍ UDÁLOSTÍ Způsob předávání a zpracování událostí se v JDK 1.1 zásadně liší od JDK 1.0, neboť starý způsob byl "shledán těžkopádným". Kombinování obou způsobů se nedoporučuje. Kromě akcí, které uživatel vyvolává přímo (pohyb myši, stisk klávesy) se za událost považuje i například otevření okna, výběr položky v menu apod. JDK 1.0 - pokud nastane libovolná událost, vytvoří se instance třídy java.awt.event. Tato instance se propaguje zdola nahoru hierarchií komponent, počínaje komponentou, nad níž událost nastala - u každé komponenty se volá metoda handleevent() s parametrem instance události. JDK 1.1 - o nastalé události jsou informovány jen ty objekty (nemusí jít pouze o komponenty), které o to požádají (zaregistrují se). O jedné události (instanci třídy java.util.eventobject) může být informováno i více objektů nebo také žádný. Události se dělí do několika tříd definovaných v balíku java.awt.event:... ActionEvent - nastane při stisku tlačítka apod., KeyEvent - nastane při stisku klávesy, MouseEvent - nastane při pohybu myši, stisknutí tlačítka myši apod., WindowEvent - nastane při otevření, zavření okna apod. VÝSTUP GRAFIKY Grafický kontext neboli objekt, pomocí kterého je možné provádět grafický výstup, reprezentují instance třídy java.awt.graphics. Tato třída definuje metody pro kreslení grafických primitiv (čára - drawline(), ovál - drawoval(), polygon - drawpolygon() apod.), výstup textu -drawstring(), vykreslení obrázku - drawimage() atd.

Grafický kontext má přiřazen každá zobrazená komponenta - výstup do jejího kontextu se provádí v metodách update(java.awt.graphics g) a paint(java.awt.graphics g). Manipulaci s obrázky (včetně načítání formátu GIF a JPEG) slouží třídy z balíku java.awt.image a třída java.awt.image. Příklad Následující program demonstruje použití AWT. Obsahuje dvě komponenty: plátno (potomka třídyjava.awt.canvas), které umožňuje kreslení pomocí myši, a tlačítko "Clear", které plátno vymaže. Program funguje jako applet i jako aplikace. Události zpracovává s využitím modelu. package demo; import java.applet.applet; import java.awt.event.*; import java.awt.*; * Hlavní třída programu SimpleDraw. * @author Petr Toman * @version JDK 1.1 public class SimpleDraw extends java.applet.applet { * Metoda init() se volá, je-li program spuštěn jako applet. * @see java.awt.frame * @see java.awt.button * @see java.awt.canvas public void init() { // vytvoření plátna -- plochy pro kreslení PaintCanvas paintcanvas = new PaintCanvas(); // vytvoření tlačítka s nápisem "Clear" Button button = new Button("Clear"); // registrace plátna jako příjemce události při stisku tlačítka button.addactionlistener(paintcanvas); // nastavení layout manageru setlayout(new BorderLayout()); // vložení plátna a tlačítka "Clear" do appletukontejneru add(paintcanvas, "North"); add(button, "South");

* Metoda main() se volá, je-li program spuštěn jako aplikace. * Provádí totéž, co init(), pouze nejprve vytvoří okno ( frame ), * do kterého umisťuje komponenty. * @param args parametry příkazové řádky (nepoužito) public static void main(string[] args) { Frame frame = new Frame("SimpleDraw"); PaintCanvas paintcanvas = new PaintCanvas(); Button button = new Button("Clear"); button.addactionlistener(paintcanvas); frame.add(paintcanvas, "North"); frame.add(button, "South"); frame.pack(); frame.show(); * Třída sloužící pro vytvoření plátna. Zachycuje události "pohyb myši" * a "stisk tlačítka" -- proto implementuje uvedená rozhraní. * @see java.awt.event.mousemotionlistener * @see java.awt.event.actionlistener public class PaintCanvas extends Canvas implements MouseMotionListener, ActionListener { Graphics offgraphics; // skrytý grafický kontext Image offimage; // skrytý obrázek (buffer) int oldx, oldy; // "staré" souřadnice myši Konstruktor public PaintCanvas() { // nastavení barvy pozadí na bílou setbackground(color.white); // registrace sebe ( this ) jako příjemce události "pohyb myši" addmousemotionlistener(this); * Metoda getminimumsize() musí být implementována kvůli * určení velikosti pro layout manager. * @return minimální velikost komponenty (plátna). public Dimension getminimumsize() { return new Dimension(300,200);

* Metoda getpreferredsize() musí být implementována kvůli * určení velikosti pro layout manager. * @return preferovanou velikost komponenty (plátna). public Dimension getpreferredsize() { return getminimumsize(); * Metoda mousedragged() je volaná při pohybu a současném držení * tlačítka myši. public void mousedragged(mouseevent e) { // je-li možno provádět výstup, vykreslí čáru if (offgraphics!= null) offgraphics.drawline(oldx, oldy, e.getx(), e.gety()); // uschování souřadnic myši oldx = e.getx(); oldy = e.gety(); // překreslit plátno! repaint(); * Metoda mousemoved() je volaná při pohybu myši (bez stisku tlačítka). public void mousemoved(mouseevent e) { // uschování souřadnic myši oldx = e.getx(); oldy = e.gety(); * Metoda actionperformed() je volaná stisku tlačítka "Clear". public void actionperformed(actionevent e) { // zrušení skrytého bufferu (bude provedeno vymazání) offimage = null; // překreslit plátno! repaint();

* Metoda update() je volána při překreslování komponenty. * Standardně vymaže pozadí a volá metodu paint(). * Je předefinována, aby nedocházelo k blikání. public void update(graphics g) { paint(g); * Metoda paint() provádí vykreslení obsahu plátna -- překopíruje * skrytý buffer do grafického kontextu komponenty ( parametr g ). public void paint(graphics g) { int width = getsize().width; int height = getsize().height; if (offimage == null) { // vytvoření prázdného bufferu offimage = createimage(width, height); offgraphics = offimage.getgraphics(); // nastala změna velikosti komponenty? if (offimage.getwidth(this)!= width offimage.getheight(this)!= height) { // ano - vytvořit skrytý buffer aktuální velikosti... Image img = createimage(width, height); offgraphics = img.getgraphics(); //... a zkopírovat starý buffer offgraphics.drawimage(offimage,0,0,this); offimage = img; // zobrazení bufferu do grafického kontextu komponenty g.drawimage(offimage,0,0,this); Pro applet je třeba vytvořit HTML dokument, který obsahuje text: <APPLET CODE = demo.simpledraw.class WIDTH = 300 HEIGHT = 230> </APPLET>