B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
A Keresés funkció Programlogika: 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. A keresés indításakor ellenőrizzük le, hogy: Léteznek-e adatsorok? Ki van-e töltve a keresőkulcs mező? Helyesen van-e megadva a keresőkulcs? A találati panelen az eredmények alatt jelenjen meg a keresési kulcs, a megfelelő mező alatt!
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)
Az EmpKer osztály kódja public class EmpKer { 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); } if (mezo.equals("nev")) { fs=key.substring(0,1); if (Character.isLetter(key.charAt(0)) || fs.equals(" ")) vi= true; if (mezo.equals("lak")) { if (Character.isLetter(key.charAt(0))) vi= true; 5/1 goodStoInt: számmá alakítható a kulcs?
Az EmpKer osztály kódja 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
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())) 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)) } } //== for ciklus vége return kertm; 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())}); } public static boolean goodStoInt(String s) { try { Integer.parseInt(s); return true; } catch (NumberFormatException e){return false;} } //== EmpKer osztály vége 5/5
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:
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);
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);
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;
Próba
Lista panel kialakítás – a panel létrehozása
V É G E VÉGE