GUI (Graphical User Interface)

Podobné dokumenty
Programování v jazyku Java GUI, události

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

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

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

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

Aplikace s grafickým uživatelským rozhraním

Základní grafika. Princip zobrazování obsahu. Grafický kontext. Zobrazovací metody. Přednáška 3

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.

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

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

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ě. 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

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

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

Základy CSS (3. přednáška)

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 aplety. Předávání parametrů z HTML

Generické programování

1. Příklad uživatelského formuláře. Do formuláře je možné zadat celkem 4 různé typy údajů

7 Jazyk UML (Unified Modeling Language)

7 Jazyk UML (Unified Modeling Language)

Úvod do programovacích jazyků (Java)

aktivita, kdy sami chceme vykreslit nějaký grafický obrazec (úsečku, kružnici, atd.) nebo vypsat text

Jazyk C# (seminář 9)

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Programování v jazyku C# II. 4.kapitola

1. Nastavení dokumentu

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

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

Programování v Javě I. Leden 2008

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

Jazyk C# (seminář 6)

Grafické uživatelské rozhraní GUI event-driven programming událostmi řízené programování

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Teoretické minimum z PJV

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

Vytváření a použití knihoven tříd

NSWI096 - INTERNET. CSS kaskádové styly. Mgr. Petr Lasák

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

Dělení a vlastnosti komponent

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Vývoj desktopových aplikací v Jazyce Java s bohatým grafickým uživatelským rozhraním.

Delphi popis prostředí

Počítačová grafika SZŠ A VOŠZ MERHAUTOVA 15, BRNO

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

7. Datové typy v Javě

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

RMI Remote Method Invocation

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

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

Tutoriál grafiky pomocí Xlib

VYUŽITÍ POČÍTAČOVÉ GRAFIKY

JAVA GUI Java, zimní semestr

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Práce se soubory v Javě

Barvy a barevné modely. Počítačová grafika

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

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

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

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

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

Takto chápanému druhu objektů se říká TŘÍDA.

Programátorská příručka

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

8. Grafické uživatelské rozhraní

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

Jazyk C# (seminář 7)

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

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

Java pro programátory.net

Typický prvek kolekce pro české řazení

DTP - X Ǝ LAT E X Písma a barvy

Obsah. LayoutInflater. UI model KeyEvent View Tvorba vlastních komponent Canvas Matrix Vlastní EditText

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

KTE / ZPE Informační technologie

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

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

Manuál k aplikaci FieldGIS v.2.27

Free and open source v geoinformatice. Příloha 1 - Praktické cvičení QGIS

Začínáme. s Autodesk 3ds Max Design

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 pro programátory.net

Úvod do počítačové grafiky

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

Java Enum Java, zimní semestr ,2017 1

4 Tvorba a editace materiálů

Zásady kreslení Kreslení na obrazovku 139

Kurz Databáze. Obsah. Formuláře. Práce s daty. Doc. Ing. Radim Farana, CSc.

Základní ovládání a práce s programem CorelDraw 11

CSS Kaskádové styly. formátování webových stránek

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

Ú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

Úvod do jazyka HTML (Hypertext Markup Language)

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

Tvorba grafického uživatelského rozhraní v BlueJ

Transkript:

GUI (Graphical User Interface) Vizuální a interaktivní komunikaci počítač-člověk podporují balíčky: java.awt - obsahuje: - komponenty: knoflíky, textová pole, menu, posuvníky, grafiku... - kontejnery: tj. komponenty do kterých lze vkládat komponenty, - layout managery: rozmisťují komponenty v plošekontejneru. java.awt.event - pojednává události a jejich zachytávání. javax.swing - podstatně vylepšuje GUI, nahrazuje plně java.awt. Ukázka v awt : PJV08 1

Zásady návrhu GUI Kvalita GUI podstatně ovlivňuje efektivitu práce uživatele ( i negativně). Uživatel podle GUI posuzuje kvalitu aplikace ( hazuka zpochybňuje ). Usilujte o jednoduše elegantní návrh s intuitivní a konzistentní funkcionalitou. Rozumně s rozměry, barvami a kontrasty - mají asociované významy. Respektujte styl a zvyklosti uživatele. Poznejte zkušenosti a prostředí uživatelů ( laik vs. expert ). Uvažte jak eventuálně hladce dále GUI rozšiřovat. Jednoduchost bývá lepší než složitost - nepřeplácat komponentami. Uživatel se nesmí ztratit vyznačujte stopu jak se tam dostal. Nezahltit informacemi a vizuálními podněty usability testy prototypů. Udržovat konzistenci použití komponent. Konzistence mezi aplikacemi look and feel. Vnitřní konzistence aplikace. Komponenty mají váhu navozují závažnost (velikost, font, barva). Pozor na ošidné layouty a resizing. Uvažte standardy a zvyklosti platforem. Uvažte i18n ( i-nternationalizatio-n ) PJV08 2

Ukázka java.io Serializable Object java.lang Component MenuContainer ImageObserver java.awt.image Container java.awt Accessible Window javax.accessibilty Frame JFrame javax.swing RootPaneContainer WindowConstants PJV08 3

Serializable java.awt.image java.awt ItemSelectable Adjustable ImageObserver Checkbox Choice List Scrollbar Component MenuContainer Button Label Text Component Canvas Component Orientation javax.accessibilty Accessible TextField TextArea java.applet javax.swing Container Panel Applet JApplet Layout = null FlowLayout javax.swing javax.swing JComponent Window BorderLayout Frame JFrame J ScrollPane Dialog FileDialog components fixed null PJV08 4

Serializable java.awt.geom.geom Adjustable Font Point2D Dimension2D ScrollPane Adjustable Font Metrics Point Dimension Menu Component Polygon MenuItem Checkbox MenuItem Shape.geom Rectangular MenuBar Menu Shape javax.accessibilty Accessible MenuContainer PopupMenu Cursor.geom Rectangle2D MenuShortcut Insets Rectangle PJV08 5

java.awt PritntJob Job Attributes KeyEvent Dispatcher KeyEvent PostProcessor Focus TraversalPolicy Page Attributes PrintGraphics Keyboard FocusManager ContainerOrder FocusTraversalPolicy SplashScreen PaintContext DefultKeyboard FocusManager DefaultFocus TraversalPolicy javax.swing Focus Composite CompositeContext Manager Apha Composite javax.swing DefaultFocus Manager 1.5 1.5 1.6 DisplayMode Robot PointerInfo MouseInfo Desktop PJV08 6

PJV08 7 java.awt MediaTracker Graphics2D Image Volatile Image Buffered Image.image Graphics.image ToolKit BasicStroke Component Orientation ActiveEvent Paint Gradient Paint Transparency Multi GradientPaint Linear GradientPaint Radial GradientPaint 1.6 1.6 1.6 Color SystemColor Color UIResource Stroke EventQueue Graphics Environment EventObject java.util Graphics Device Image Capabilities Texture Paint AWTEvent Multicaster ** listenery.event AWTKey Stroke KeyStroke Invocation Event.event javax.swing.plaf AWT Event *events

LayoutManager ~ rozmisťovač LayoutManager Panel default Flow GridBag ScrollPane ViewPort Layout Layout Layout Layout LayoutManager2 javax.swing Window default Border Grid Card Box Overlay Spring Layout Layout Layout Layout Layout Layout Flow - jako text přetékající na dalšířádky ( alignment L/R a centrování ) Border - jako mapa s oblastmi ( C,N,E,S,W ) a jen pro pět komponent. Card - jako balíček karet - vidět je jen vrchní karta. Grid - pravidelná mřížka - jedna komponenta zabere jen jedno k políčko. GridBag - nepravidelná mřížka - jedna komponenta zabere i více políček. null - určí programátor pomocí setbounds( x, y, w, h ). PJV08 8

java.awt: Layouts Čísla vyjadřují index komponenty v seznamu. 0 3 1 2 0 1 5 4 FlowLayout W e s t 4 North 2 Center South BorderLayout 3 E a s t BorderLayout má pět oblastí. V každé zobrazí je jednu komponentu poslední z přidělených do oblasti. Centrální oblast je vzadu event. překrytá ostatními. Indexy oblastí jsou dle JBuilder designeru. 0 1 2 3 4 5 GridLayout GridBagLayout CardLayout PJV08 9

Metrika Vizuální komponenty a displej se rozměřují v pixelech takto: x y 0,0 w h height w-1, h-1 width Tyto parametry se zadávají ve čtveřici či dvojici vždy takto ( příklad ): setlocation( x, y ) new Point( x, y ) move ( x, y ) setsize( w, h ) new Dimension( w, h ) setbounds( x, y, w, h ) new Rectangle( x, y, w, h ) drawoval( x, y, w, h ) PJV08 10

Component Tato třída je velmi bohatá obsahuje metody pro ovládání: velikosti, umístění a viditelnosti barvy pozadí a popředí událostí myši klávesnice kurzoru grafiky písma obrázky animace PJV08 11

Container Do kontejnerů se vkládají komponenty a další kontejnery ( mimo Window a jeho podtříd - tj. top level containers ), čímž vznikne strom. Container vede seznam dle něhož LayoutManagery rozmísťují komponenty. Metody pro práci se seznamem komponent: - add( Component comp ) přidá na konec. - add( Component comp, Object constraints ) a navíc udává omezení. - add( Component comp, int index ) přidá na udanou pozici. - remove( Component comp ), remove( int index ), removeall( ). - list(... ) výpis aktuální stavu seznamu. Dále lze nastavovat a zjišťovat typ rozmístění metodami: - setlayout( LayoutManager mgr ) a LayoutManager getlayout( ). měnit rozmístění komponent pomocí metody: - invalidate( ) zneplatní tento a všechny obalující kontejnery ( parents ). - validate( ) znovu rozmístí všechny své komponenty. aktualizovat grafiku pomocí update( Graphics g ) a paint( Graphics g ). pracovat s fokusem. PJV08 12

Graphics Tento objekt umožňuje v objektech typu Component a tedy i Canvas, Panel, Applet, Window, Frame atd. vytvořit a upravovat kresby, texty a obrázky. Přístup k němu se získá přepsáním zděděné prázdné metody např. takto: public void paint( Graphics g ) { g.drawxyz(... ); // kreslí obrys obrazce v barvě BLACK g.setcolor( c1 ); // nastaví pero na barvu c1 g.fillxyz(... ); // kreslí plný obrazec g.setfont( f ); // nastaví font písma g.setcolor( c2 ); // nastaví pero na barvu c2 g.drawstring( s,... ); // nakreslí text dle fontu barvy c2 g.drawimage( im,... ); // vykreslí obrázek {.gif,.jpg,.png Případně též metodou Graphics getgraphics( ), která vytvoří grafický kontext pro skrytý bufer ( off-screen image ). To využívá technika tzv. double bufferingu pro hladší animace. PJV08 13

Graphics Jednoduché obrazce a čáry a další metody: drawpolyline() clearrect( ) - přemalování na barvu pozadí dle setbackground( ) cliprect( ), getclip( ), setclip( ),... - vytřihovánky a nalepovánky copyarea( ) - kopírování plošky setfont( ), getfont( ) - práce s fonty getfontmetrics( ) - měření nápisů dispose( ) - uvolnění zdrojů PJV08 14

Font Tato třídy podporuje rozmanitá vykreslení textů. Font má konstruktor: public Font ( String name, int style, int size ) kde: name - courier, helvetica, dialog, inputdialog, sanserif, monospaced... style - tvar znaků zadaný konstantami PLAIN, BOLD, ITALIC size - bodová velikost např. 8.. 96 Příklad: public void paint( Graphics g ) { g.setfont( new Font( "courier", Font.ITALIC + Font.BOLD, 18 ) ); g.drawstring( "Hello, World", 75, 400 ); Fonty jsou uspořádány v rodinách. Zjistit dostupné fonty lze takto: GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment( ); Font[ ] ff = ge.getallfonts( ); PJV08 15

FontMetrics Zvláště proporcionální písmomalířství je obtížné. FontMetrics umožňuje písmo daného fontu měřit a zkusmo pak zvolit vhodný font. Metrika písma: K měření pro daný font slouží metody: getleading, getascent, getdescent, getheight, getmaxascent, getmaxdescent, getmaxadvance... a zejména pratické: int charwidth( char c ) vrací odstup znaku od dalšího v řádce. int stringwidth( String s ) vrací délku řetězu. FontMetrics fm = g.getfontmetrics( ); int w = fm.stringwidth( "áčďéěíňóřšťúůýžáčďéěíňóřšťúůýž" ); PJV08 16

Color Barvířství je kumšt, neb lidské oko rozeznává asi 6000 barevných odstínů. Třída Color poskytuje teoreticky 16777216 barev a řiditelnou průhlednost. Konstanty definují 13 standardních barev: { BLACK, BLUE, CYAN, DARK_GRAY, GREEN, GRAY, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, YELLOW. Všechny barvy v modelu RGB vytvoří konstruktory: Color ( int red, int green, int blue, int alpha ) int = 0.. 255 Color ( float red, float green, float blue, float alpha ) float = 0.0.. 1.0 kde: red, green, blue je síla barevných složek, alpha = 255 je úplná opacita ( neprůhlednost ), alpha = 0 je úplná transparence ( průhlednost ). Metody darker( ) resp. brighter( ) vytvářejí novou barvu tmavějšího resp. světlejšího odstínu zadané barvy avšak s úplnou opacitou. PJV08 17

Modifikace kreseb Při objevení ( zpočátku, deiconifikaci, odkrytí ) volá awt vlákno metodu g.clearrect(...), která přebarví pozadí a pak metodu paint( Graphics g ). Při programovém volání metody repaint(... ), awt vlákno zavolá metodu update( Graphics g ), která defaultně obsahuje: public void update( Graphics g ) {... g.clearrect(... ); paint( g ); Metodu update je možné přepsat, např. tak aby se nepřemalovávalo, čímž se kreslí na předchozí kresbu: public void update( Graphics g ) { paint( g ); public void paint( Graphics g ) {... Vnější změnou atributů užitých v kreslících metodách ( tj. g.draw( ) apod. ) a následném zavolání repaint(... ) se kresba změníči animuje. Přepočítání atributůči pospávání by mělo konat samostatné vlákno nikoli awt thread ( je dost zaměstnáno a sleduje chování uživatele ). PJV08 18

repaint( ), update( ), paint( ) int x = 333; setvisible, unhide, enlarge setbackground, setforeground, setfont, setlayout, validate, add, remove compute(... ) { x = 777 ; repaint(... )... user thread user thread idle default update( Graphics g ) { g.clearrect(... ) ; on user request paint( update( g ); Graphics // optiong ) { g.draw...( x,... ) ; paint( g ); // option awt thread idle awt thread on GUI request partial clearrect( ) paint( Graphics g ) { g.draw...( x,... ) ;... PJV08 19

Frame s komponentami public class MyFrame extends Frame { Button b1 = new Button( " OK " ); Button b2 = new Button( " Cancel " ); TextField tf = new TextField( " ********* " ); public MyFrame( ) { super( " This is MyFrame " ); // titulek this.setlayout( new FlowLayout( ) ); // zmena rozmisteni this.add( b1 ); b1.setforeground( Color.GREEN ); this.add( b2 ); b2.setforeground( Color.RED ); this.add( tf ); this.setbounds( 100, 100, 400, 400 ); this.setvisible( true ); // aktivace awt vlakna public static void main( String [ ] args ) { MyFrame mf = new MyFrame( ); mf.b1.setbackground( Color.YELLOW ); // zmena zvnejsku PJV08 20

Vykreslení obrázku public class ImageLoad extends Frame { static Toolkit tk = Toolkit.getDefaultToolkit( ); static Image img = tk.getimage( "C:\\...\\star.gif" ); int width, height ; public ImageLoad( ) throws Exception { MediaTracker mt = new MediaTracker( this ); mt.addimage( img, 0 ); mt.waitforall( ); width = img.getwidth( this ); height = img.getheight( this ); this.setbounds( 100, 100, 200, 200); this.setvisible( true ); public void paint( Graphics g ) { g.drawimage( img, 100, 100, this ); PJV08 21