java programozÁspallaszlo/java/eloadas/4.eloadas.pdfbetű, szín 36 colorosztály rgb színt tárol...
TRANSCRIPT
JAVA PROGRAMOZÁS4.ELŐADÁS
Dr. Pál László, Sapientia EMTE, Csíkszereda
4.ELŐADÁS
Kivételkezelés, Grafikus felhasználói felület2014-2015 tavasz
Kivételkezelés2
Rendszerhibák és kivételek3
� 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� 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ói5
Nem ellenőrzött ellenőrzött kivételek6
� 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ása7
� Ki váltja ki?
� API metódus
� Programozó
� Kivétel kiváltása: kivételobjektum létrehozása és � 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
Kivétel útja - Példa8
Kivétel útja - Példa9
Kivétel útja - Példa10
Vektor túlindexelése - Példa11
A kivétel továbbadása – throws12
� 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 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 – throws13
� Példa:
A kivétel továbbadása – throws14
� Példa:
A kivétel elkapása, kezelése15
� 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ése16
� 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:� é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
Kivétel elkapásának útja17
Kivétel elkapásának útja18
Saját kivételek - Példa19
Saját kivételek - Példa20
Grafikus felhasználói felület21
AWT és Swing22
� 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):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)
Komponensek23
� Téglalap alapú képernyőfelületek, meghatározott tulajdonságokkal és viselkedéssel
� Swing komponensek közös őse a javax.swing.JComponentjavax.swing.JComponent
� Konténer komponensek
� Vezérlő komponensek
Komponensek hierarchiája24
Komponensek tulajdonosi viszonya25
� 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étkomponensé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ályhierarchia26
Swing program - Példa27
� 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 szöveggel, továbbá legyen két nyomógomb, OK és Nem OK felirattal!
lbInfo
fr
btNemOkbtOk
Swing program - Példa28
Swing program - Példa29
Jellemzők30
� Property: Beállítható és lekérdezhető tulajdonság
� Deklaráció: PropType propName;
� beállító metódus (set):void setPropName(PropType propName)void setPropName(PropType propName)
� lekérdező metódus (get / is):PropType getPropName()boolean isPropName()
Pont, méret, téglalap31
� 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átarendszer32
screenSize.width=1024x(0,0)
y
screenSize.height=768 A képernyő bal alsó sarka: (1023,767)
Toolkit osztály33
� Alapvető, környezetfüggő metódust tartalmaz, amelyek a képernyőkezeléshez, nyomtatáshoz szükségesek
� Metódusok:� Metódusok:
� Static Toolkit get DefaultToolkit()
� Dimension getScreenSize()
� Int getScreenResolution()
� Image createImage(String filename)
� void beep()
Toolkit osztály - Példa34
Betű, szín35
� Font osztály
� Adott tulajdonságú fontot (betűfajtát) tárol
� Tulajdonságok� String fontName (név, pl.: Arial, Monospaced)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ín36
� 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 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ín37
� 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élda38
JComponent osztály39
� Absztrakt osztály
� A képernyőn megjelenő Swing komponensek közös őse
� Font font
� Cursor cursor
� Border border
� Dimension maximumSizeDimension minimumSize
� Mezők� static final float
CENTER_ALIGNMENT, ...
� Jellemzők� Color background
Color foreground
� boolean opaque
Dimension minimumSizeDimension preferredSize
� float alignmentXfloat alignmentY
� String toolTipText
� boolean visible
� boolean enabled
� boolean requestFocusEnabled
JComponent osztály - Jellemzők40
� Helyzet, méret� int getX()
int getY()
� int getWidth()int getHeight()
� void setSize(int width, int height)
� boolean contains(int x, int y)boolean contains(Point p)int getHeight()
� Rectangle getBounds()
� Point getLocation()Point getLocationOnScreen()
� void setBounds(int x, int y, int width, int height)void setLocation(int x, int y)
boolean contains(Point p)
JComponent osztály - Jellemzők41
� Láthatóság, érvényesség� boolean isDisplayable()
� void validate()
� Fókusz, eseményfogadásboolean hasFocus()� boolean hasFocus()
� void requestFocus()
� void transferFocus()
� Szülő, állapot� Container getParent()
� String toString()
� void list()
A java.awt.Container osztálY42
� Konténer-komponensek közös őse
� Jellemzők:
� LayoutManager layoutMgr
� Komponens hozzáadása, kivétele� 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ály43
� Gyerekkomponensek� int getComponentCount()
� Component[] getComponents()
� Component getComponent(int n)
� Component getComponentAt(int x, int y)� 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ály44
� Összes AWT és Swing ablak komponens közös őse
� Utódai: Frame, JFrame, Dialog, JDialog, Jwindow
� Metódusok:� void pack()
void show()� void show()
� boolean isShowing()void hide()
� void setLocationRelativeTo(Component c)
� void toBack()void toFront()
� void dispose()
A java.awt.Window osztály45
� 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ály46
� 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� Van szegélye, ikonja, címe és menüsora
� Komponenseit a tartalompanelbe (content pane) kell tenni
A JFrame osztály47
� Jellemzők
� String title
� Image iconImage
� MenuBar menuBar� MenuBar menuBar
� boolean resizable
� int state
� Metódusok
� Container getContentPane()
� setDefaultCloseOperation(int operation)
� static Frame[] getFrames()
A JFrame osztály - Példa48
Könyvészet49
� 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.2011.