Java Programozás 6. Gy: Java alapok Adatkezelő 2.rész 25/1 B ITv: MAN 2018.04.13
A feladat Feladat: folytassuk a panel életre keltését! - Alakítsuk ki a Lista panelt - Betöltéskor olvassuk be az adatokat a fájlból, és írjuk ki az adatsorok számát 25/2
Lista panel kialakítás tábla modell létrehozása A táblázat kezelése egy táblamodellel kezdődik. A modellben lehet megadni az egyes mezők típusát és szerkeszthetőségét. A DefaultTableModel leszármaztatásával jön létre, konstruktorában kapja meg a mezőneveket, és az oszlopok számát. Programlogika: 1. Egy modellt használnánk csak a programban az egyszerűség miatt 2. A módosításnál és a törlésnél ki kell jelölni egy rekordot, így szükséges egy jelölhető (logikai típusú) mező a sor elejére 3. A mezők típusa rendre: logikai, egész, szöveg, szöveg, szöveg, egész 3. Csak a legelső (logikai) mezőnek kell szerkeszthetőnek lennie (a 25/3 kijelölhetőség miatt!)
Lista panel kialakítás tábla modell létrehozása File \ New \ Class - Neve legyen: EmpTM 25/4
Lista panel kialakítás tábla modell létrehozása import javax.swing.table.defaulttablemodel; public class EmpTM extends DefaultTableModel { public EmpTM (Object fildnames[], int rows){ super(fildnames, rows); 25/5 Zöld: kötelező rész, minden táblamodellben egyforma! Konstruktor: megkapja a mezők nevét és a sorok számát. public boolean iscelleditable(int row, int col) { if (col == 0) {return true; return false; Szerkeszthetőség: a 0. oszlop minden sora szerkeszthető, a többi cella nem! public Class<?> getcolumnclass(int index){ if (index == 0) return(boolean.class); else if (index==1 index==5) return(integer.class); return(string.class); Oszlopok típusa: a 0. oszlop logikai, az 1. és az 5. egész, a többi szöveges!
Lista panel kialakítás a panel létrehozása New \ Swing \ JDialog Vegyük ki a pipát! Utólag törölhető a panel, ha mégis marad a pipa! 25/6
Lista panel kialakítás a panel létrehozása Vegyük szélesebbre az ablakot 25/7
Lista panel kialakítás a panel létrehozása Kapcsoljuk ki az elrendezés menedzselését! 25/8
Lista panel kialakítás a panel létrehozása Hozzuk létre a Bezár nyomógombot 25/9
Lista panel kialakítás a panel létrehozása Adjunk a panelhez egy JTable-t. 25/10
Lista panel kialakítás a panel létrehozása Adjunk a JTable-höz egy JScrollPane-t (görgetősávok) 1 3 2 25/11
Lista panel kialakítás a panel létrehozása Futtassuk a kódot, nézzük meg a panelt! 25/12
Lista panel kialakítás a panel létrehozása Kódbűvölés következik! Az osztály elejére: private EmpTM etm; A JTable kódjába: A kódból töröljük a main függvényt! table = new JTable(etm); A táblázatban az etm modell fog megjelenni Nem lesz önállóan futtatható a panel, ezért nem kell bele a main függvény! 25/13
Lista panel kialakítás a panel létrehozása Alakítsuk át a konstruktor elejét: public EmpList(JFrame f, EmpTM betm) { super(f, "Dolgozók listája", true); etm = betm; Tulajdonos, ablak címe, modális jelző A kód végére írjuk be a következőket: Modális ablak lesz, melyet be kell zárni ahhoz, hogy az alatta lévő ablak újra aktív legyen! TableColumn tc = null; for (int i = 0; i < 6; i++) { tc = table.getcolumnmodel().getcolumn(i); if (i==0 i==1 i==5) tc.setpreferredwidth(30); else {tc.setpreferredwidth(100); 25/14 30 30 100 100 100 30 Oszlopszélesség megadása: a teljes szélességet felosztja az itt megadott értékek arányában!
Lista panel kialakítás a panel létrehozása A kód végére írjuk be a következőket: table.setautocreaterowsorter(true); AutoSorter bekapcsolása TableRowSorter<EmpTM> trs = (TableRowSorter<EmpTM>)table.getRowSorter(); trs.setsortable(0, false); A 0. oszlop rendezhetőségének letiltása 25/15
Lista panel kialakítás a panel bezárása Kattintsunk duplán a Bezár gombon Dizájn nézetben, így az Eklipsz hozzáad egy eseménykezelőt a gombhoz, és megnyitja a kódot! Írjuk be a Bezár gomb kódját: JButton btnnewbutton = new JButton("Bez\u00E1r"); btnnewbutton.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { dispose(); setvisible(false); ); 25/16 dispose(): eltűnik a képernyőről a panel, de a referenciái megmaradnak. setvisible(false): eltűnik a képernyőről a panel, de a referenciái megmaradnak. A két utasítás hatása ugyanaz, elég az egyiket használni!
A Lista panel megjelenítése (az EmpProgramban) Kódok beszúrása: Az osztály elejére: private EmpTM etm; A Lista gomb kódja: JButton bl = new JButton("Lista"); bl.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { EmpList el = new EmpList(EmpProgram.this, etm); el.setvisible(true); Megjelenítés ); Példányosítás A konstruktor végére: Mezőnevek megadása Object emptmn[] = {"Jel","Kód","Név","Szülidő","Lakóhely","IQ"; etm = new EmpTM(emptmn, 0); etm példányosítása: mezőnevekkel, 0 darab sorral 25/17
A Lista panel kipróbálása (az EmpProgramban) 25/18
Adatok beolvasása csv fájlból Programlogika: 1. Egy külön osztályba tegyük a fájlkezelő rutinokat (FileManager) 2. A rutin megkapja a beolvasandó fájl nevét, és a táblamodell nevét 3. Beolvassa az adatokat, berakja a táblamodellbe, és visszaadja a táblamodellt import java.io.*; import javax.swing.joptionpane; 3/1 public class FileManager { private static String mes = "Emp program üzenet"; 25/19 public static void CsvReader(File fnev, EmpTM etm) { String kod="", nev="", szido="", lakh="", iq="", s=""; try { BufferedReader in = new BufferedReader(new FileReader(fnev)); BufferedReader: pufferelt szövegolvasó. A fájlból egyszerre max. 1024 kb-ot olvas be a memóriába, és onnan lehet soronként kiolvasni az adatokat.
Adatok beolvasása csv fájlból s=in.readline(); //=== mezőnevek az első sorból 3/2 s=in.readline(); //=== adatsor while(s!=null) { String[] st = s.split(";"); etm.addrow(new Object[]{new Boolean(false), StoI(st[0]), st[1], st[2], st[3], StoI(st[4])); s=in.readline(); in.close(); JOptionPane.showMessageDialog(null, "Adatok beolvasva!", mes, 1); catch (IOException ioe) { JOptionPane.showMessageDialog( null, "CsvReader: "+ioe.getmessage(), mes, 0); 25/20 s 21;Kő Éva;1999.12.21;Miskolc;118 st 21 s.split(";"); Kő Éva 1999.12.21 Miskolc 118
Adatok beolvasása csv fájlból public static int StoI(String s){ int x=-55; x = Integer.parseInt(s); return x; 3/3 25/21
Betöltés a.csv olvasás életre keltése A Betöltés gomb kódja az EmpProgram osztályban JButton bb= new JButton("Bet\u00F6lt\u00E9s"); bb.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { if (forras.equals("helyi.csv fájl")) { FileDialog fd = new FileDialog(new Frame(), " ", FileDialog.LOAD); ); 25/22 fd.setfile("*.csv"); A meglévő kód fd.setvisible(true); if (fd.getfile()!= null) { fbe = new File(fd.getDirectory(), fd.getfile()); String befnev = fd.getfile(); fnev.settext(befnev); FileManager.CsvReader(fbe, etm); Kék: új kódrészek fdb.settext(""+etm.getrowcount());
Lista panel kialakítás a panel kipróbálása Ha mindent jól csináltunk, a program betölti és megjeleníti a csv fájlok tartalmát: 1 5 2 3 6 4 25/23
Lista panel kialakítás a panel létrehozása 25/24
VÉGE VÉGE 25/25