Java Programozs 8 Gy Java alapok Adatkezel 4

  • Slides: 37
Download presentation
Java Programozás 8. Gy: Java alapok Adatkezelő 4. rész B IT M A N

Java Programozás 8. Gy: Java alapok Adatkezelő 4. rész B IT M A N 37/1 2018. 04. 15 B ITv: M AN

A feladat Feladat: folytassuk a panel életre keltését! - - 37/2 Készítsük el a

A feladat Feladat: folytassuk a panel életre keltését! - - 37/2 Készítsük el a Módosítás funkciót A Lista panelt másoljuk le, és bővítsük a szükséges mezőkkel A Módosít gomb megnyomásakor az adott mezőkbe írt adatok módosuljanak a kijelölt rekordban B IT M A N

Az Emp. List panel lemásolása n Álljunk rá a projektünkben az Emp. List osztály

Az Emp. List panel lemásolása n Álljunk rá a projektünkben az Emp. List osztály nevére, és Ctrl + V másoljuk le az osztályt. Ctrl + C n A megjelenő panelen adjuk meg az új osztály nevét: Emp. Mod 37/3 B IT M A N

Az Emp. Mod ideiglenes átalakítása n Az Emp. Mod panel nem futtatható, így nagyon

Az Emp. Mod ideiglenes átalakítása n Az Emp. Mod panel nem futtatható, így nagyon nehéz a grafikus felületen módosításokat végezni, ezért ideiglenesen alakítsuk át futtathatóra: – Az Emp. Programból másoljuk át a main függvényt, és alakítsuk át, hogy ezt a panelt indítsa! – A paraméterként bejövő táblamodellt szüntessük meg, és helyette példányosítsuk a panelen az etm táblamodellt (a kódot az Emp. Programból másoljuk át!) n Ha kész a grafikus átalakítás, ezeket a módosításokat vissza kell majd állítani! 37/4 B IT M A N

Az Emp. Mod ideiglenes átalakítása private Emp. TM etm; public static void main(String[] args)

Az Emp. Mod ideiglenes átalakítása private Emp. TM etm; public static void main(String[] args) { Event. Queue. invoke. Later(new Runnable() { public void run() { try { Emp. Mod frame = new Emp. Mod(null); frame. set. Visible(true); } catch (Exception e) { e. print. Stack. Trace(); } } }); } Ideiglenes main függvény, benne az átalakított Emp. Mod példányosítás Kommentben az eredeti adatok, így könnyebb lesz visszaállítani őket! public Emp. Mod(JFrame f) { //== , Emp. Tm betm super(f, "Dolgozók listája", true); //== etm = betm; Object emptmn[] = {"Jel", "Kód", "Név", "Szülidő", "Lakóhely", "IQ"}; etm = new Emp. TM(emptmn, 0); Ideiglenes etm példány, 37/5 IT A N set. Bounds(100, 500, 300); az Emp. Programból! B M

Próba - Feladat - 37/6 Készítsük el a megjelölt módosításokat! B IT M A

Próba - Feladat - 37/6 Készítsük el a megjelölt módosításokat! B IT M A N

Az Emp. Mod panel grafikus átalakítása n Ha nem jelenne meg a Design fül,

Az Emp. Mod panel grafikus átalakítása n Ha nem jelenne meg a Design fül, akkor zárjuk be a panel kódját, és nyissuk meg a következő módon: 1. Jobb klikk az osztály nevére, a Package Explorerben 2. Open With 3. Window. Builder Editor 2 3 1 37/7 B IT M A N

Az Emp. Mod panel grafikus átalakítása n Vegyük kisebbre (alacsonyabbra) a táblázatot n Vegyük

Az Emp. Mod panel grafikus átalakítása n Vegyük kisebbre (alacsonyabbra) a táblázatot n Vegyük észre: a kód nem változtatható! n Rakjunk fel egy szövegmezőt (JText. Field) n Másoljuk le a szövegmezőt, közben állítsuk be a megfelelő szélességeket! (Ciklusban: módosítok, megnézem) n Állítsuk be a szövegmezők neveit: nev, szid, lakh, iq n Másolással készítsük el a Módosít gombot, Var: modosit 1. változat Kész a panel 37/8 B IT M A N

Magyarázatok Programlogika: 1. Az adatokat csak a megkapott táblamodellben módosítjuk, a végleges (perzisztens) tároláshoz

Magyarázatok Programlogika: 1. Az adatokat csak a megkapott táblamodellben módosítjuk, a végleges (perzisztens) tároláshoz később ki kell írni őket fájlba! 2. Csak egy adatsor, de annak akár az összes adata módosítható egyszerre, ebből következnek a Módosítás gomb megnyomásakor lezajló ellenőrzések. Hiba keletkezik, ha: 1. Ha nincs kitöltve egyetlen módosítandó adat sem, 2. Ha a Születési időben hibás dátum van, 3. Ha hibás szám van az IQ mezőben, 4. Ha nincs kijelölve módosítandó rekord 5. Ha több rekord van kijelölve módosításra 3. A szükséges metódusok megegyeznek az Új dolgozó panelen megírtakkal. 4. Mi lenne, ha elegánsan kitennénk ezeket egy osztályba (BC), és azt példányosítva használnánk (mint ahogy kell)? ! 37/9 B IT M A N

A BC (Basic. Class) osztály kódja n Hozzunk létre a projekthez egy sima osztály:

A BC (Basic. Class) osztály kódja n Hozzunk létre a projekthez egy sima osztály: – File New Class – Legyen az osztály neve: BC n A New. Emp osztályból másoljuk át a kódot, a szükséges importokat és a szükséges változókat. Legyen minden változó és metódus statikus! import import java. text. Parse. Exception; java. text. Simple. Date. Format; java. util. Date; javax. swing. JOption. Pane; javax. swing. JText. Field; 3/1 public class BC { private static Simple. Date. Format sdf = new Simple. Date. Format("yyyy. MM. dd"); private static String mes = "Emp program üzenet"; 37/10 B IT M A N

A BC (Basic. Class) osztály kódja public static String RF(JText. Field a) { return

A BC (Basic. Class) osztály kódja public static String RF(JText. Field a) { return a. get. Text(). to. String(); } public static boolean filled(JText. Field a) { String s = RF(a); if (s. length() > 0) return true; else return false; } public static boolean good. Date(JText. Field a) { String s = RF(a); Date test. Date = null; try {test. Date = sdf. parse(s); } catch (Parse. Exception e){return false; } if (sdf. format(test. Date). equals(s)) return true; else return false; } public static boolean good. Int(JText. Field a) { String s = RF(a); try {Integer. parse. Int(s); return true; } catch (Number. Format. Exception e){return false; } 37/11 } 3/2 B IT M A N

A BC (Basic. Class) osztály kódja public static void show. MD(String s, int i){

A BC (Basic. Class) osztály kódja public static void show. MD(String s, int i){ 3/3 JOption. Pane. show. Message. Dialog(null, s, mes, i); } public static Date Sto. D(String s){ Date test. Date = null, vid = null; try {test. Date = sdf. parse(s); } catch (Parse. Exception e){return vid; } if (!sdf. format(test. Date). equals(s)){return vid; } return test. Date; } public static int Sto. I(String s){ int x=-55; x = Integer. parse. Int(s); return x; } public static void DF(JText. Field a) { a. set. Text(""); + Adott szövegmezőt kiürítő metódus } } //== osztály vége 37/12 B IT M A N

Az Emp. Mod panel Módosítás gombjának kódja n A grafikus dizájnerben kattintsunk duplán a

Az Emp. Mod panel Módosítás gombjának kódja n A grafikus dizájnerben kattintsunk duplán a Módosít gombra, így hozzáadunk egy eseménykezelőt, és visszajutunk a kódba. Kezdjük a kód kiegészítését. n Készítsük el a Módosít gomb kódját: JButton modosit = new JButton("Mu 00 F 3 dosu 00 EDt"); 2/1 modosit. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event arg 0) { if (!BC. filled(nev) && !BC. filled(szid) && !BC. filled(lakh) && !BC. filled(iq)) BC. show. MD("Egyetlen módosító adat sincs beírva!", 0); else if (BC. filled(szid) && !BC. good. Date(szid)) BC. show. MD( "A Születési idő mezőben hibás adat van!", 0); else if (BC. filled(iq) && !BC. good. Int(iq)) BC. show. MD( "Az IQ mezőben hibás adat van!", 0); else { 37/13 B IT M A N

Az Emp. Mod panel Módosítás gombjának kódja int db=0, jel=0, x=0; 2/2 for(x =

Az Emp. Mod panel Módosítás gombjának kódja int db=0, jel=0, x=0; 2/2 for(x = 0; x < etm. get. Row. Count(); x++) if ((Boolean)etm. get. Value. At(x, 0)) {db++; jel=x; } if (db==0) BC. show. MD("Nincs kijelölve a módosítandó rekord!", 0); if (db>1) BC. show. MD("Több rekord van kijelölve!n. Egyszerre csak egy rekord módosítható!", 0); if (db==1) { if (BC. filled(nev)) etm. set. Value. At(BC. RF(nev), jel, 2); if (BC. filled(szid)) etm. set. Value. At(BC. RF(szid), jel, 3); if (BC. filled(lakh)) etm. set. Value. At(BC. RF(lakh), jel, 4); if (BC. filled(iq)) etm. set. Value. At(BC. RF(iq), jel, 5); BC. show. MD("A rekord módosítva!", 1); BC. DF(nev); BC. DF(szid); BC. DF(lakh); BC. DF(iq); etm. set. Value. At(new Boolean(false), jel, 0); } }); 37/14 B IT M A N

Az Emp. Mod panel visszaalakítása n Töröljük ki a main függvényt! n Állítsuk vissza

Az Emp. Mod panel visszaalakítása n Töröljük ki a main függvényt! n Állítsuk vissza az ideiglenesen módosított sorokat! A main függvény hűlt helye public Emp. Mod(JFrame f, Emp. TM betm) { super(f, "Dolgozók listája", true); etm = betm; set. Bounds(100, 500, 300); 37/15 A helyreállított konstruktor Az ideiglenes emp példány hűlt helye B IT M A N

Az Emp. Mod meghívása az Emp. Programból n A Módosítás gomb kódja: JButton modosit

Az Emp. Mod meghívása az Emp. Programból n A Módosítás gomb kódja: JButton modosit = new JButton("Mu 00 F 3 dosu 00 EDtu 00 E 1 s"); modosit. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { if (etm. get. Row. Count()==0) BC. show. MD("Nincs módosítható adat!", 0); else { Emp. Mod em = new Emp. Mod(Emp. Program. this, etm); em. set. Visible(true); } } }); 37/16 B IT M A N

A Módosítás funkció kipróbálása 3 1 2 9 4 7 5 8 37/17 6

A Módosítás funkció kipróbálása 3 1 2 9 4 7 5 8 37/17 6 B IT M A N

Lista panel kialakítás – a panel létrehozása 37/18 B IT M A N

Lista panel kialakítás – a panel létrehozása 37/18 B IT M A N

A feladat Feladat: folytassuk a panel életre keltését! - - 37/19 Készítsük el a

A feladat Feladat: folytassuk a panel életre keltését! - - 37/19 Készítsük el a Törlés funkciót Egyszerre csak egy rekord törölhető, extra funkcióként ez átállítható A Lista panelt másoljuk le, és azt alakítsuk át a szükséges módon B IT M A N

Az Emp. List panel lemásolása n Álljunk rá a projektünkben az Emp. List osztály

Az Emp. List panel lemásolása n Álljunk rá a projektünkben az Emp. List osztály nevére, és Ctrl + V másoljuk le az osztályt. Ctrl + C n A megjelenő panelen adjuk meg az új osztály nevét: Emp. Del 37/20 B IT M A N

Az Emp. Del panel kialakítása n Nyissuk meg a panelt a Window. Builder Editor-ral!

Az Emp. Del panel kialakítása n Nyissuk meg a panelt a Window. Builder Editor-ral! 37/21 B IT M A N

Az Emp. Del panel kialakítása (Design) n Írjuk át a panel nevét, title: Dolgozók

Az Emp. Del panel kialakítása (Design) n Írjuk át a panel nevét, title: Dolgozók törlése n Vegyük alacsonyabbra a táblázatot n Rakjunk egy JCheck. Box-ot a panelre n n – Variable: jcb – text: Több rekord is törölhető egyszerre Adjunk a jcb-hez akciókezelőt: – Add event handler action. Performed Váltsunk vissza Design nézetre, másoljuk le a Bezár gombot, írjuk át a feliratát, rakjuk a megfelelő helyre! – Var: torol, text: Töröl Kattintsunk a Töröl gombra duplán (akciókezelő hozzáadása) Kész a panel, jöhet a kód módosítása 37/22 B IT M A N

Magyarázatok Programlogika: 1. Szükségünk lesz egy változóra, ami a többes törlés funkció állapotát mutatja

Magyarázatok Programlogika: 1. Szükségünk lesz egy változóra, ami a többes törlés funkció állapotát mutatja (md) 2. A kilépés kezelésével nem kell foglalkoznunk, mert ezen a panelen fogjuk kitörölni a táblázatból az adatokat, és mivel a panel konstruktorában szerepel az etm = betm; utasítás (a főprogramból paraméterként érkező betm, és a panelen használt etm megegyezik, vagyis a két táblamodell ugyanarra a változóra mutat), a főprogramban automatikusan módosulnak az adatok! 37/23 B IT M A N

Az Emp. Del panel kialakítása – kód: n A többes törlés változójának deklarálása: private

Az Emp. Del panel kialakítása – kód: n A többes törlés változójának deklarálása: private boolean md=false; n A többes törlés JCheck. Box (jcb) kódja: jcb. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event arg 0) { md = jcb. is. Selected(); } }); 37/24 B IT M A N

Az Emp. Del panel kialakítása – kód: n A Törlés (torol) gomb kódja: int

Az Emp. Del panel kialakítása – kód: n A Törlés (torol) gomb kódja: int db=0, jel=0, x=0; for(x = 0; x < etm. get. Row. Count(); x++) if ((Boolean)etm. get. Value. At(x, 0)) {db++; jel=x; } if (db==0) BC. show. MD("Nincs kijelölve a törlendő rekord!", 0); if (!md) { if (db>1) BC. show. MD("Több rekord van kijelölve!n. Egyszerre csak egy rekord törölhető!", 0); if (db==1) { etm. remove. Row(jel); BC. show. MD("A rekord törölve!", 1); } } else { for (int i=0; i<etm. get. Row. Count(); i++) if ((Boolean)etm. get. Value. At(i, 0)) {etm. remove. Row(i); i--; } BC. show. MD("Rekord(ok) törölve!", 1); } 37/25 B IT M A N

Az Emp. Del panel beépítése az Emp. Programba n Az Emp. Program-ban lévő Törlés

Az Emp. Del panel beépítése az Emp. Programba n Az Emp. Program-ban lévő Törlés (torol) gomb kódja: if (etm. get. Row. Count()==0) BC. show. MD("Nincs törölhető adat!", 0); else { Emp. Del ed = new Emp. Del(Emp. Program. this, etm); ed. set. Visible(true); fdb. set. Text(""+etm. get. Row. Count()); } n Kész! Próbálja ki mindenki az alkotást! 37/26 B IT M A N

Lista panel kialakítás – a panel létrehozása 37/27 B IT M A N

Lista panel kialakítás – a panel létrehozása 37/27 B IT M A N

A feladat Feladat: folytassuk a panel életre keltését! - 37/28 Készítsük el a Keresés

A feladat Feladat: folytassuk a panel életre keltését! - 37/28 Készítsük el a Keresés funkciót Kezdjük a grafikus felület kialakításával B IT M A N

A Keresés panel kialakítása – Emp. Program n Emp. Program, Design felület! n Containers

A Keresés panel kialakítása – Emp. Program n Emp. Program, Design felület! n Containers JPanel n Bal felső sarok helyén kattintani, nyomva tartani az egeret, elhúzni a jobb alsó sarokba, elengedni az egeret! 37/29 B IT M A N

A Keresés panel kialakítása – Emp. Program n Szegély a panel köré: Properties

A Keresés panel kialakítása – Emp. Program n Szegély a panel köré: Properties border. . . A többi tulajdonság maradjon! 37/30 B IT M A N

A Keresés panel kialakítása – Emp. Program n Kapcsoljuk ki a panel elrendezés menedzserét!

A Keresés panel kialakítása – Emp. Program n Kapcsoljuk ki a panel elrendezés menedzserét! 1 3 37/31 2 B IT M A N

A Keresés panel kialakítása – Emp. Program n Rakjuk a panelre a Keresés feliratot

A Keresés panel kialakítása – Emp. Program n Rakjuk a panelre a Keresés feliratot n Rakjuk fel a Kód JRadio. Button-t, Var: jrbkod, text: Kód n Legyen kiválasztva ez az nyomógomb 37/32 B IT M A N

A Keresés panel kialakítása – Emp. Program n Másolással készítsük el a többi rádiógombot:

A Keresés panel kialakítása – Emp. Program n Másolással készítsük el a többi rádiógombot: Név Lakóhely IQ Variable jrbnev jrblak jrbiq Text Név Lakóhely IQ n Másolással készítsük el az X= feliratot n Rakjunk fel egy szövegmezőt, Var: kulcs n Rakjuk fel a Keresés gombot, Var: keres 37/33 B IT M A N

A Keresés panel kialakítása – Emp. Program n Kódban alakítsuk ki a nyomógomb csoportot!

A Keresés panel kialakítása – Emp. Program n Kódban alakítsuk ki a nyomógomb csoportot! n Az egyes nyomógombok definíciója alá írjuk be a kódot: Button. Group bg = new Button. Group(); bg. add(jrbkod); bg. add(jrbnev); bg. add(jrblak); bg. add(jrbiq); n Deklaráljunk egy változót, amiben mindig a kiválasztott keresőkulcs értéke lesz. Alapértéke a kod, hiszen ez ki van választva induláskor! private String kerkif="kod"; 37/34 B IT M A N

A Keresés panel kialakítása – Emp. Program n Adjunk hozzá Design felületen akciókezelőt a

A Keresés panel kialakítása – Emp. Program n Adjunk hozzá Design felületen akciókezelőt a jrbkod nyomógombhoz: jobb klikk Add event handler action. Performed n Adjuk hozzá az esemény kódját (állítsuk be a kerkif változó értékét) if (jrbkod. is. Selected()) kerkif="kod"; n Ismételjük meg a fenti műveletsort a többi nyomógombra! if (jrbnev. is. Selected()) kerkif="nev"; if (jrblak. is. Selected()) kerkif="lak"; if (jrbiq. is. Selected()) kerkif="iq"; 37/35 B IT M A N

Házi feladat n Aki akarja (mindenki), az írja át úgy az Új dolgozó panel,

Házi feladat n Aki akarja (mindenki), az írja át úgy az Új dolgozó panel, és az Emp. Program osztály kódját, hogy az is a BC osztály metódusait használja! 37/36 B IT M A N

V ÉGE VÉGE 37/37 B IT M A N

V ÉGE VÉGE 37/37 B IT M A N