Java Programozás 9. Gy: Java alapok Adatkezelő 5.rész 15/1 B ITv: MAN 2018.04.22
A Keresés funkció Programlogika: 1. A keresés az etm táblamodellben fog keresni, és a találat rekordokat átmásolja egy másik táblamodellbe (kertm), melyet megjelenítünk a keresés találati panelen. 2. A keresés indításakor ellenőrizzük le, hogy: 1. Léteznek-e adatsorok? 2. Ki van-e töltve a keresőkulcs mező? 3. Helyesen van-e megadva a keresőkulcs? 3. A találati panelen az eredmények alatt jelenjen meg a keresési kulcs, a megfelelő mező alatt! 15/2
Az EmpKer osztály Hozzunk létre a projekthez egy sima osztály: File \ New \ Class Legyen az osztály neve: EmpKer Írjunk egy olyan osztályt (KeyCheck), amely leellenőrzi, hogy a keresőkulcs megfelelő-e. Készítsük el a leválogató metódust, amely az adatokat tartalmazó táblamodellből átmásolja a megfelelő rekordokat az eredmény táblamodellbe (Select) 15/3
Az EmpKer osztály kódja public class EmpKer { 5/1 public static boolean KeyCheck(String mezo, String key){ boolean vi=false; Character fc=' '; String fs=""; if (mezo.equals("kod")) { if (key.substring(0,1).equals("=")) key=key.substring(1, key.length()); vi= goodstoint(key); goodstoint: számmá alakítható a kulcs? if (mezo.equals("nev")) { fs=key.substring(0,1); if (Character.isLetter(key.charAt(0)) fs.equals(" ")) vi= true; 15/4 if (mezo.equals("lak")) { if (Character.isLetter(key.charAt(0))) vi= true;
Az EmpKer osztály kódja 15/5 if (mezo.equals("iq")) { fs=key.substring(0,1); fc=key.charat(0); if (fs.equals("<") fs.equals(">") fs.equals("=")) { if (key.length()>1 && goodstoint(key.substring(1,key.length()))) vi= true; else vi= false; if (Character.isDigit(fc) && key.indexof("..")>0) { int x = key.indexof(".."); String k1 = key.substring(0,x); String k2 = key.substring(x+2,key.length()); if (goodstoint(k1) && goodstoint(k2)) vi=true; else vi=false; return vi; 5/2
Az EmpKer osztály kódja public static EmpTM Select(EmpTM etm, String mezo, String key){ Object emptmn[] = {"Jel","Kód","Név","Szülidő","Lakóhely","IQ"; EmpTM kertm = new EmpTM(emptmn, 0); String k ="", k1="", k2=""; int x=0; if (mezo.equals("kod") && key.substring(0,1).equals("=")) key=key.substring(1, key.length()); if (mezo.equals("iq")) k=key.substring(1, key.length()); if (mezo.equals("iq") && key.indexof("..")>0) { x=key.indexof(".."); k1=key.substring(0,x); k2=key.substring(x+2,key.length()); 5/3 15/6
Az EmpKer osztály kódja for (int i=0; i<etm.getrowcount(); i++) { if (mezo.equals("kod") && key.equals(etm.getvalueat(i,1).tostring())) Pack(etm, kertm, i); if (mezo.equals("nev") && etm.getvalueat(i,2).tostring().indexof(key) >= 0) Pack(etm, kertm, i); if (mezo.equals("lak") && key.equals(etm.getvalueat(i,4).tostring())) Pack(etm, kertm, i); if (mezo.equals("iq") && key.substring(0,1).equals("=") && k.equals(etm.getvalueat(i,5).tostring())) Pack(etm, kertm, i); if (mezo.equals("iq") && key.substring(0,1).equals(">") && BC.StoI(k) < BC.StoI(etm.getValueAt(i,5).toString())) Pack(etm, kertm, i); if (mezo.equals("iq") && key.substring(0,1).equals("<") && BC.StoI(k) > BC.StoI(etm.getValueAt(i,5).toString())) Pack(etm, kertm, i); if (mezo.equals("iq") && key.indexof("..")>0) { String s = etm.getvalueat(i,5).tostring(); if (BC.StoI(k1) < BC.StoI(s) && BC.StoI(k2) > BC.StoI(s)) Pack(etm, kertm, i); //== for ciklus vége return kertm; 15/7 5/4
Az EmpKer osztály kódja public static void Pack(EmpTM etm, EmpTM kertm, int row){ kertm.addrow(new Object[]{new Boolean(false), BC.StoI(etm.getValueAt(row,1).toString()), etm.getvalueat(row,2).tostring(), etm.getvalueat(row,3).tostring(), etm.getvalueat(row,4).tostring(), BC.StoI(etm.getValueAt(row,5).toString())); 5/5 public static boolean goodstoint(string s) { try { Integer.parseInt(s); return true; catch (NumberFormatException e){return false; //== EmpKer osztály vége 15/8
A Keresés panel létrehozása Másoljuk le az EmpMod osztályt, legyen az új neve: EmpKerP Nyissuk meg az EmpKerP osztályt a WindowBuilder Editorral Jobbklikk \ Open With \ WindowBuilder Editor Nyissuk meg Design nézetben Töröljük ki a Születési idő alatti mezőt: Másoljuk le az IQ mezőt, legyen az új változó neve: kod A kód és az iq mező tartalmát igazítsuk jobbra! Töröljük ki a Módosít gombot, a Bezár gombot tegyük középre: 15/9
A Keresés panel létrehozása Módosítsuk az EmpKerP osztály kódját! Módosítsuk a konstruktort, adjuk meg a bemenő paramétereket: public EmpKerP(JFrame f, EmpTM betm, String mezo, String kulcs) { A szövegmezők közül mindig csak az látszódjon, amelyikre a keresés történt. A kód végére illesszük be a sorokat: kod.setvisible(false); nev.setvisible(false); lakh.setvisible(false); iq.setvisible(false); if (mezo.equals("kod")) kod.setvisible(true); if (mezo.equals("nev")) nev.setvisible(true); if (mezo.equals("lak")) lakh.setvisible(true); if (mezo.equals("iq")) iq.setvisible(true); 15/10
A Keresés panel létrehozása Minden egyes szövegmezők tartalma induláskor a keresőkulcs legyen, hiszen úgyis csak az fog látszódni, amelyikre a keresés történt. A szövegmezők konstruktorát javítsuk ki: nev = new JTextField(kulcs); lakh = new JTextField(kulcs); iq = new JTextField(kulcs); kod = new JTextField(kulcs); 15/11
A Keresés életre keltése az EmpProgramban Adjunk akciókezelőt a Keresés gombhoz, és írjuk be a kódot: if (BC.RF(fdb).equals("0")) BC.showMD("Nincs betöltött adat!", 0); else if (!BC.filled(kulcs)) BC.showMD("A keresőkulcs (X=) nincs megadva!", 0); else if (!EmpKer.KeyCheck(kerkif, BC.RF(kulcs))) BC.showMD("A keresőkulcs hibásan van megadva!", 0); else { kertm = EmpKer.Select(etm, kerkif, BC.RF(kulcs)); EmpKerP ek = new EmpKerP(EmpProgram.this, kertm, kerkif, BC.RF(kulcs)); ek.setvisible(true); A kertm deklarációja: private EmpTM kertm; 15/12
Próba 15/13
Lista panel kialakítás a panel létrehozása 15/14
VÉGE VÉGE 15/15