JAVA PROGRAMOZÁSpallaszlo/java/eloadas/4.Eloadas.pdfBetű, szín 36 Colorosztály RGB színt tárol...

Preview:

Citation preview

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.

Recommended