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)
Rendszerhibák és kivételek osztályhierarchiája 4
Kivételosztályok deklarációi 5
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 ()
A kivétel a metódushívási láncon visszafelé kiszáll a programból
Kivétel útja - Példa 8
Kivétel útja - Példa 9
Kivétel útja - Példa 10
Vektor túlindexelése - Példa 11
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 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
} catch ( ){ //catch blokk } … catch ( ){ //catch blokk } finally { //finally blokk }
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
Működése
értékadási kompatibilitás: formális kivételobjektum = aktuális kivételobjektum manipulálható, a blokk végén elpusztul 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
Kivétel elkapásának útja 17
Kivétel elkapásának útja 18
Saját kivételek - Példa 19
Saját kivételek - Példa 20
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
Komponensek hierarchiája 24
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
AWT és Swing osztályhierarchia 26
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
Swing program - Példa 28
Swing program - Példa 29
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 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 Point
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()
Toolkit osztály - Példa 34
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);
Betű, szín - Példa 38
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()
A JFrame osztály - Példa 48
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.