Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Hasonló dokumentumok
Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Java Programozás 2. Gy: EmpProgram. Grafikus felületű adatkezelő program

Java Programozás 11. Ea: MVC modell

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozási technológia

Swing GUI készítése NetBeans IDE segítségével

Java Programozás 3. Gy: Java GUI. Swing, AWT

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java Programozás 10. Ea: JDBC. SQLite alapokon

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Programozási technológia

Programozási nyelvek Java

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Java programozási nyelv 6. rész Java a gyakorlatban

BME MOGI Gépészeti informatika 4.

ZH mintapélda. Feladat. Felület

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Java felhasználói felület

Access adatbázis elérése OLE DB-n keresztül

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

OOP: Java 8.Gy: Gyakorlás

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

4. Gy: JAVA osztályok

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 4.Gy: Java osztályok

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Entity Framework alapú adatbáziselérés

BME MOGI Gépészeti informatika 7.

3. Osztályok II. Programozás II

Java és web programozás

Java felhasználói felület

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Stateless Session Bean

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 4. rész Osztályok II.

Informatika terméktervezőknek

Műveletek makrókkal. Makró futtatása párbeszédpanelről. A Színezés makró futtatása a Makró párbeszédpanelről

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Concurrency in Swing

Tájékoztató. Használható segédeszköz: -

Szoftvertechnolo gia gyakorlat

I. 288.: Utcai WiFi térkép

C#---Access adatbáziskezelési gyakorlat

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

Szoftvertechnológia alapjai Java előadások

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

BME MOGI Gépészeti informatika 8.

7. K: JAVA alapok Konzultáció

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

A Java nyelv. Dialógus ablakok. Elek Tibor

Szoftvertechnológia alapjai Java előadások

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Duál Reklám weboldal Adminisztrátor kézikönyv

Oktatási anyag az MLSZ-IFA rendszerhez

TANSZÉKI ADMINISZTRÁTORI SEGÉDLET: NEPTUN TÁRGYKEZELÉS, KURZUSKEZELÉS

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Swing. (A javax.swing csomag)

Gyorsított jegybeírás. Felhasználói dokumentáció verzió 2.0.

OOP: Java 1.Gy: Java alapok

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Java és web programozás

munkafüzet open eseményéhez

Vizuális programozás gyakorlat

Dokumentum létrehozása/módosítása a portálon:

libgdx alapok, első alkalmazás

Java és web programozás

Objektumorientált programozás C# nyelven III.

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Kifizetések kezelése. 1 Kifizetési dátumok megadása pénzügyi kódokhoz

Kalapácsvetés 2016 szöveges

Java Programozás 8. Ea: GUI. Graphical User Interface

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

OOP #14 (referencia-elv)

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Segédanyag: Java alkalmazások gyakorlat

Kézikönyv. Láthatóság kezelése a grafikus maszkszerkesztőben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Átírás:

Java Programozás 8. Gy: Java alapok Adatkezelő 4.rész 37/1 B ITv: MAN 2018.04.15

A feladat Feladat: folytassuk a panel életre keltését! - 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 37/2

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

Az EmpMod ideiglenes átalakítása Az EmpMod 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 EmpProgrambó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 EmpProgramból másoljuk át!) Ha kész a grafikus átalakítás, ezeket a módosításokat vissza kell majd állítani! 37/4

Az EmpMod ideiglenes átalakítása private EmpTM etm; public static void main(string[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { EmpMod frame = new EmpMod(null); frame.setvisible(true); catch (Exception e) { e.printstacktrace(); ); Ideiglenes main függvény, benne az átalakított EmpMod példányosítás Kommentben az eredeti adatok, így könnyebb lesz visszaállítani őket! public EmpMod(JFrame f) { //==,EmpTm betm super(f, "Dolgozók listája", true); //== etm = betm; Object emptmn[] = {"Jel","Kód","Név","Szülidő","Lakóhely","IQ"; etm = new EmpTM(emptmn, 0); Ideiglenes etm példány, 37/5 setbounds(100, 100, 500, 300); az EmpProgramból!

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

Az EmpMod panel grafikus átalakítása 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. WindowBuilder Editor 2 3 1 37/7

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

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

A BC (BasicClass) osztály kódja Hozzunk létre a projekthez egy sima osztály: File \ New \ Class Legyen az osztály neve: BC A NewEmp 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 java.text.parseexception; import java.text.simpledateformat; import java.util.date; import javax.swing.joptionpane; import javax.swing.jtextfield; 3/1 public class BC { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); private static String mes = "Emp program üzenet"; 37/10

A BC (BasicClass) osztály kódja public static String RF(JTextField a) { return a.gettext().tostring(); public static boolean filled(jtextfield a) { String s = RF(a); if (s.length() > 0) return true; else return false; public static boolean gooddate(jtextfield a) { String s = RF(a); Date testdate = null; try {testdate = sdf.parse(s); catch (ParseException e){return false; if (sdf.format(testdate).equals(s)) return true; else return false; public static boolean goodint(jtextfield a) { String s = RF(a); try {Integer.parseInt(s); return true; catch (NumberFormatException e){return false; 37/11 3/2

A BC (BasicClass) osztály kódja + public static void showmd(string s, int i){ 3/3 JOptionPane.showMessageDialog(null, s, mes, i); public static Date StoD(String s){ Date testdate = null, vid = null; try {testdate = sdf.parse(s); catch (ParseException e){return vid; if (!sdf.format(testdate).equals(s)){return vid; return testdate; public static int StoI(String s){ int x=-55; x = Integer.parseInt(s); return x; public static void DF(JTextField a) { a.settext(""); Adott szövegmezőt kiürítő metódus //== osztály vége 37/12

Az EmpMod panel Módosítás gombjának kódja 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. Készítsük el a Módosít gomb kódját: JButton modosit = new JButton("M\u00F3dos\u00EDt"); 2/1 modosit.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { if (!BC.filled(nev) &&!BC.filled(szid) &&!BC.filled(lakh) &&!BC.filled(iq)) BC.showMD("Egyetlen módosító adat sincs beírva!",0); else if (BC.filled(szid) &&!BC.goodDate(szid)) BC.showMD( "A Születési idő mezőben hibás adat van!",0); else if (BC.filled(iq) &&!BC.goodInt(iq)) BC.showMD( "Az IQ mezőben hibás adat van!",0); else { 37/13

Az EmpMod panel Módosítás gombjának kódja ); 37/14 int db=0, jel=0, x=0; 2/2 for(x = 0; x < etm.getrowcount(); x++) if ((Boolean)etm.getValueAt(x,0)) {db++; jel=x; if (db==0) BC.showMD("Nincs kijelölve a módosítandó rekord!",0); if (db>1) BC.showMD("Több rekord van kijelölve!\negyszerre csak egy rekord módosítható!",0); if (db==1) { if (BC.filled(nev)) etm.setvalueat(bc.rf(nev), jel, 2); if (BC.filled(szid)) etm.setvalueat(bc.rf(szid), jel, 3); if (BC.filled(lakh)) etm.setvalueat(bc.rf(lakh), jel, 4); if (BC.filled(iq)) etm.setvalueat(bc.rf(iq), jel, 5); BC.showMD("A rekord módosítva!",1); BC.DF(nev); BC.DF(szid); BC.DF(lakh); BC.DF(iq); etm.setvalueat(new Boolean(false), jel, 0);

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

Az EmpMod meghívása az EmpProgramból A Módosítás gomb kódja: JButton modosit = new JButton("M\u00F3dos\u00EDt\u00E1s"); modosit.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (etm.getrowcount()==0) BC.showMD("Nincs módosítható adat!", 0); else { EmpMod em = new EmpMod(EmpProgram.this, etm); em.setvisible(true); ); 37/16

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

Lista panel kialakítás a panel létrehozása 37/18

A feladat Feladat: folytassuk a panel életre keltését! - 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 37/19

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

Az EmpDel panel kialakítása Nyissuk meg a panelt a WindowBuilder Editor-ral! 37/21

Az EmpDel panel kialakítása (Design) Írjuk át a panel nevét, title: Dolgozók törlése Vegyük alacsonyabbra a táblázatot Rakjunk egy JCheckBox-ot a panelre Variable: jcb text: Több rekord is törölhető egyszerre Adjunk a jcb-hez akciókezelőt: \ Add event handler \ action \ actionperformed 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

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

Az EmpDel panel kialakítása kód: A többes törlés változójának deklarálása: private boolean md=false; A többes törlés JCheckBox (jcb) kódja: jcb.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { md = jcb.isselected(); ); 37/24

Az EmpDel panel kialakítása kód: A Törlés (torol) gomb kódja: int db=0, jel=0, x=0; for(x = 0; x < etm.getrowcount(); x++) if ((Boolean)etm.getValueAt(x,0)) {db++; jel=x; if (db==0) BC.showMD("Nincs kijelölve a törlendő rekord!",0); if (!md) { if (db>1) BC.showMD("Több rekord van kijelölve!\negyszerre csak egy rekord törölhető!",0); if (db==1) { etm.removerow(jel); BC.showMD("A rekord törölve!",1); else { for (int i=0; i<etm.getrowcount(); i++) if ((Boolean)etm.getValueAt(i,0)) {etm.removerow(i); i--; BC.showMD("Rekord(ok) törölve!",1); 37/25

Az EmpDel panel beépítése az EmpProgramba Az EmpProgram-ban lévő Törlés (torol) gomb kódja: if (etm.getrowcount()==0) BC.showMD("Nincs törölhető adat!", 0); else { EmpDel ed = new EmpDel(EmpProgram.this, etm); ed.setvisible(true); fdb.settext(""+etm.getrowcount()); Kész! Próbálja ki mindenki az alkotást! 37/26

Lista panel kialakítás a panel létrehozása 37/27

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

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

A Keresés panel kialakítása EmpProgram Szegély a panel köré: Properties \ border... A többi tulajdonság maradjon! 37/30

A Keresés panel kialakítása EmpProgram Kapcsoljuk ki a panel elrendezés menedzserét! 1 3 2 37/31

A Keresés panel kialakítása EmpProgram Rakjuk a panelre a Keresés feliratot Rakjuk fel a Kód JRadioButton-t, Var: jrbkod, text: Kód Legyen kiválasztva ez az nyomógomb 37/32

A Keresés panel kialakítása EmpProgram 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 Másolással készítsük el az X= feliratot Rakjunk fel egy szövegmezőt, Var: kulcs Rakjuk fel a Keresés gombot, Var: keres 37/33

A Keresés panel kialakítása EmpProgram Kódban alakítsuk ki a nyomógomb csoportot! Az egyes nyomógombok definíciója alá írjuk be a kódot: ButtonGroup bg = new ButtonGroup(); bg.add(jrbkod); bg.add(jrbnev); bg.add(jrblak); bg.add(jrbiq); 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

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

Házi feladat Aki akarja (mindenki), az írja át úgy az Új dolgozó panel, és az EmpProgram osztály kódját, hogy az is a BC osztály metódusait használja! 37/36

VÉGE VÉGE 37/37