Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 4.ELŐADÁS 2014-2015 tavasz Kivételkezelés, Grafikus felhasználói felület
2 Kivételkezelés
Rendszerhibák és kivételek 3 Programot leállító események: objektumok, melyek osztályai a Throwable osztály leszármazottai A dobható események két csoportja: Rendszerhiba (Error): a programot leállítja Kivétel (Exception): hibakezelés után a program folytatódhat Nem ellenőrzött kivétel: nem kötelező kezelni (futási hibák, RuntimeException és annak leszármazottai) Ellenőrzött kivétel: kötelező kezelni (többi Exception)
4 Rendszerhibák és kivételek osztályhierarchiája
5 Kivételosztályok deklarációi
Nem ellenőrzött ellenőrzött kivételek 6 Nem ellenőrzött kivételek: Futási hibák, vagyis RuntimeException és annak leszármazottai A nem ellenőrzött kivételeket a programozó nem köteles lekezelni Ellenőrzött kivételek: Minden kivétel, kivéve az előző csoportot A programozónak kötelező lekezelnie, különben a fordító hibát jelez
Kivételek keletkezése és kiváltása 7 Ki váltja ki? API metódus Programozó Kivétel kiváltása: kivételobjektum létrehozása és bedobása (throw) a program vérkeringésébe throw new <Kivételosztály>(<információs szöveg>) A kivétel a metódushívási láncon visszafelé kiszáll a programból
8 Kivétel útja - Példa
9 Kivétel útja - Példa
10 Kivétel útja - Példa
11 Vektor túlindexelése - Példa
A kivétel továbbadása throws 12 Ellenőrzött kivételekkel a metódushívási lánc minden metódusában foglalkoznunk kell Két lehetőségünk van: a metódusban kezeljük a kivételt a kivételt továbbadjuk a hívó metódusnak Kivétel továbbadásának jelzése a metódusfejben: throws <Kivételosztály1, Kivételosztály2,... > throws Exception A kivételosztályok továbbadáskor nem szűkíthetők!
A kivétel továbbadása throws 13 Példa:
A kivétel továbbadása throws 14 Példa:
A kivétel elkapása, kezelése 15 try-catch-finally szerkezet try { // try blokk <utasítások> } catch (<Kivételosztály1> <obj1>){ //catch blokk <utasítások> } catch (<KivételosztályN> <objn>){ //catch blokk <utasítások> } finally { //finally blokk <utasítások> }
A kivétel elkapása, kezelése 16 try blokk Kivételek keletkezésének feltételezett helye catch blokk Kivétel kezelése az érkező kivételobjektum alapján Aktuális (érkező) kivételobjektum értékadási kompatibilitás: formális kivételobjektum = aktuális kivételobjektum manipulálható, a blokk végén elpusztul Működése legfeljebb egy catch blokk hajtódik végre sorrend: egyre általánosabb kivételek definiálandók nincs kezelve továbbadódik a hívó metódusnak finally blokk Minden körülmények között végrehajtódik
17 Kivétel elkapásának útja
18 Kivétel elkapásának útja
19 Saját kivételek - Példa
20 Saját kivételek - Példa
21 Grafikus felhasználói felület
AWT és Swing 22 A GUI (Graphical User Interface) programozására Java kétféle osztálygyűjteményt biztosít. Mindkét esetben a cél a platformfüggetlenség: AWT (Abstract Window Toolkit): Felhasználja az adott operációs rendszer saját GUI komponenseit (java.awt csomag) Swing: Az AWT komponensek pehelysúlyú (swing) változatai A komponensek grafikusan vannak kirajzolva Az AWT-re épül (javax.swing csomag)
Komponensek 23 Téglalap alapú képernyőfelületek, meghatározott tulajdonságokkal és viselkedéssel Swing komponensek közös őse a javax.swing.jcomponent Konténer komponensek Vezérlő komponensek
24 Komponensek hierarchiája
Komponensek tulajdonosi viszonya 25 Két típusú lehet: Konténer és komponense: A konténer komponensei fizikailag sosem kerülhetnek a konténeren kívülre Konténer megszűnése maga után vonja az összes komponensének a megszűnését Példa: a keret, dialógusablak, panel konténerek Ablak és ablaka: A gyerek ablakok elhelyezkedése és mérete független a szülő ablaktól Példa: JWindow, JDialog
26 AWT és Swing osztályhierarchia
Swing program - Példa 27 Feladat: Készítsük el az itt látható keretet! A keret bal felső sarka a képernyő (100,50) pozícióján legyen, mérete 300*100, címe: Frame teszt. A kereten legyen egy címke a Döntsd el: szöveggel, továbbá legyen két nyomógomb, OK és Nem OK felirattal! fr lbinfo btok btnemok
28 Swing program - Példa
29 Swing program - Példa
Jellemzők 30 Property: Beállítható és lekérdezhető tulajdonság Deklaráció: PropType propname; beállító metódus (set): void setpropname(proptype propname) lekérdező metódus (get / is): PropType getpropname() boolean ispropname()
Pont, méret, téglalap 31 Osztályok a látható komponensek paraméterezéséhez Point osztály: megjegyzi egy pont x és y koordinátáit Dimension osztály: megjegyzi egy téglalap méretét (szélességét és magasságát) Rectangle osztály: megjegyzi egy téglalap helyzetét (location): bal felső sarkának x és y koordinátáit, és méretét (dimension): szélességét (width) és magasságát (height)
Koordinátarendszer 32 (0,0) x screensize.width=1024 y screensize.height=768 A képernyő bal alsó sarka: (1023,767)
Toolkit osztály 33 Alapvető, környezetfüggő metódust tartalmaz, amelyek a képernyőkezeléshez, nyomtatáshoz szükségesek Metódusok: Static Toolkit get DefaultToolkit() Dimension getscreensize() Int getscreenresolution() Image createimage(string filename) void beep()
34 Toolkit osztály - Példa
Betű, szín 35 Font osztály Adott tulajdonságú fontot (betűfajtát) tárol Tulajdonságok String fontname (név, pl.: Arial, Monospaced) int style (stílus, pl.: PLAIN, BOLD, ITALIC) int size (betűméret pontokban) Példánya változtathatatlan Minden komponensnek van fontja Logikai fontnevek: SansSerif, Serif, Monospaced, Dialog, DialogInput
Betű, szín 36 Color osztály RGB színt tárol Minden szín a 3 alapszín (piros,zöld,kék) keveréke Tulajdonságok int red (piros összetevő, 0..255) int green (zöld összetevő, 0..255) int blue (kék összetevő, 0..255) Példánya változtathatatlan Minden komponensnek van egy háttérszíne és egy előtérszíne (betűszíne) Konstans szín objektumokat definiál: Color.black, Color.blue, Color.white,...
Betű, szín 37 SystemColor osztály Rendszer által használt színeket definiál: SystemColor.info, SystemColor.infoText, SystemColor.desktop,... Példa: lb = new JLabel("Szöveg:"); lb.setfont(new Font( Arial",Font.BOLD,24)); lb.setbackground(systemcolor.control); lb.setforeground(color.red);
38 Betű, szín - Példa
JComponent osztály 39 Absztrakt osztály A képernyőn megjelenő Swing komponensek közös őse Mezők static final float CENTER_ALIGNMENT,... Jellemzők Color background Color foreground boolean opaque Font font Cursor cursor Border border Dimension maximumsize Dimension minimumsize Dimension preferredsize float alignmentx float alignmenty String tooltiptext boolean visible boolean enabled boolean requestfocusenabled
JComponent osztály - Jellemzők 40 Helyzet, méret int getx() int gety() int getwidth() int getheight() Rectangle getbounds() Point getlocation() Point getlocationonscreen() void setbounds(int x, int y, int width, int height) void setlocation(int x, int y) void setsize(int width, int height) boolean contains(int x, int y) boolean contains(point p)
JComponent osztály - Jellemzők 41 Láthatóság, érvényesség boolean isdisplayable() void validate() Fókusz, eseményfogadás boolean hasfocus() void requestfocus() void transferfocus() Szülő, állapot Container getparent() String tostring() void list()
A java.awt.container osztály 42 Konténer-komponensek közös őse Jellemzők: LayoutManager layoutmgr Komponens hozzáadása, kivétele Component add(component comp) Component add(component comp, int index) void remove(component comp) void remove(int index) void removeall()
A java.awt.container osztály 43 Gyerekkomponensek int getcomponentcount() Component[] getcomponents() Component getcomponent(int n) Component getcomponentat(int x, int y) Component getcomponentat(point p) boolean isancestorof(component comp) Elrendezés Dimension getmaximumsize() Dimension getminimumsize() Dimension getpreferredsize()
A java.awt.window osztály 44 Összes AWT és Swing ablak komponens közös őse Utódai: Frame, JFrame, Dialog, JDialog, Jwindow Metódusok: void pack() void show() boolean isshowing() void hide() void setlocationrelativeto(component c) void toback() void tofront() void dispose()
A java.awt.window osztály 45 Metódusok: void addwindowlistener(windowlistener l) void removewindowlistener(windowlistener l) Component getfocusowner() Window getowner() Window[] getownedwindows() Aktív ablak Az operációs rendszerben pontosan egy alkalmazás aktív, egy alkalmazásban pedig pontosan egy ablak aktív.
A JFrame osztály 46 Közvetlen ős: java.awt.frame A Swing egyetlen natív komponense Keret: legfelső szintű ablak, nincs tulajdonosa Van szegélye, ikonja, címe és menüsora Komponenseit a tartalompanelbe (content pane) kell tenni
A JFrame osztály 47 Jellemzők String title Image iconimage MenuBar menubar boolean resizable int state Metódusok Container getcontentpane() setdefaultcloseoperation(int operation) static Frame[] getframes()
48 A JFrame osztály - Példa
Könyvészet 49 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.