B M Java Programozás 6. Gy: Java alapok IT A N Adatkezelő 2.rész
A kód Feladat: folytassuk a panel életre keltését! Alakítsuk ki a Lista panelt Betöltéskor olvassuk be az adatokat, és írjuk ki az adatsorok számát
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: Egy modellt használnánk csak a programban az egyszerűség miatt 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 A mezők típusa rendre: logikai, egész, szöveg, szöveg, szöveg, egész Csak a legelső (logikai) mezőnek kell szerkeszthetőnek lennie (a kijelölhetőség miatt!)
Lista panel kialakítás – tábla modell létrehozása File \ New \ Class
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); } public boolean isCellEditable(int row, int col) { if (col == 0) {return true;} return false; public Class<?> getColumnClass(int index){ if (index == 0) return(Boolean.class); else if (index==1 || index==5) return(Integer.class); return(String.class); Zöld: kötelező rész, minden táblamodell-ben egyforma! Konstruktor: megkapja a mezők nevét és a sorok számát. Szerkeszthetőség: a 0. oszlop minden sora szerkeszthető, a többi cella nem! 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
Lista panel kialakítás – a panel létrehozása Vegyük szélesebbre az ablakot
Lista panel kialakítás – a panel létrehozása Kapcsoljuk ki az elrendezés menedzselését!
Lista panel kialakítás – a panel létrehozása Töröljük ki a létrehozott nyomógomb panelt!
Lista panel kialakítás – a panel létrehozása Hozzuk létre a Bezár nyomógombot
Lista panel kialakítás – a panel létrehozása Adjunk a panelhez egy JTable-t.
Lista panel kialakítás – a panel létrehozása Adjunk a JTable-höz egy JScrollPane-t (görgetősávok)
Lista panel kialakítás – a panel létrehozása Futtassuk a kódot, nézzük meg a panelt!
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: table = new JTable(etm); A táblázatban az etm modell fog megjelenni A kódból töröljük a main függvényt! Nem lesz önállóan futtatható a panel, ezért nem kell bele a main függvény!
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ő Modális ablak lesz, melyet be kell zárni ahhoz, hogy az alatta lévő ablak újra aktív legyen! A kód végére írjuk be a következőket: 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);} } 30 100 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: AutoSorter bekapcsolása table.setAutoCreateRowSorter(true); TableRowSorter<EmpTM> trs = (TableRowSorter<EmpTM>)table.getRowSorter(); trs.setSortable(0, false); A 0. oszlop rendezhetőségének letiltása
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); } });
A Lista panel kipróbálása (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); } }); Példányosítás Megjelení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
A Lista panel kipróbálása (az EmpProgramban)
Adatok beolvasása csv fájlból Programlogika: Egy külön osztályba tegyük a fájlkezelő rutinokat (FileManager) A rutin megkapja a beolvasandó fájl nevét, és a táblamodell nevét Beolvassa az adatokat, berakja a táblamodellbe, és visszaadja a táblamodellt import java.io.*; import javax.swing.JOptionPane; public class FileManager { private static String mes = "Emp program üzenet"; public static void CsvReader(File fnev, EmpTM etm) { String kod="", nev="", szido="", lakh="", iq="", s=""; try { FileInputStream f=new FileInputStream(fnev); LineNumberReader in=new LineNumberReader(new InputStreamReader(f)); 3/1
Adatok beolvasása csv fájlból s=in.readLine(); //=== mezőnevek az első sorból s=in.readLine(); //=== adatsor while(s!=null) { String[] splitS = s.split(";"); kod = splitS[0]; nev = splitS[1]; szido = splitS[2]; lakh = splitS[3]; iq = splitS[4]; etm.addRow(new Object[]{new Boolean(false), StoI(kod), nev, szido, lakh, StoI(iq)}); s=in.readLine(); } in.close(); JOptionPane.showMessageDialog(null, "Adatok beolvasva!", mes, 1); } catch (IOException ioe) {JOptionPane.showMessageDialog( null, "CsvReader: "+ioe.getMessage(), mes, 0);} 3/2
Adatok beolvasása csv fájlból public static int StoI(String s){ int x=-55; x = Integer.parseInt(s); return x; } 3/3
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); fd.setFile("*.csv"); 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); } fdb.setText(""+etm.getRowCount()); }); Zöld: a meglévő kód Kék: új kódrészek
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 2 5 3 6 4
Lista panel kialakítás – a panel létrehozása
V É G E VÉGE