PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski
Prosta plikowa baza danych Stworzyć plikową bazę danych umożliwiającą dodawanie, edycję i usuwanie rekordów
Zadania: Zaimplementować klasę Osoba z polami: –String name; –float mark; Klasa Osoba powinna implementować interfejs Serializable Stworzyć jedną lub więcej formatek z komponentami jTable (lista), jButton (operacje), jComboBox (wybór oceny) i jTextField (imie) Stworzyć menu za pomocą JMenu i jMenuItem Do wypelnienia jComboBox dostępnymi ocenami należy użyć modelu, np. DefaultComboBoxModel(String[]) Edycja rekordów w bazie może być zrealizowana w dodatkowym oknie (jDialog) Stworzyć listę osób z wykorzystaniem klasy List<> Aby wyświetlić listę w jTable należy stworzyć model dziedziczący po klasie AbstractTableModel Model tabeli powinien przechowywać referencję do listy i nagłówki kolumn, konieczna jest implementacja metod: getRowCount, getColumnCount, getValueAt(int row, int col), getColumnName(int col) Funckja setModel ustawi model dla komponentu jTable Zainicjować model listą osób Po zmianie na liście (dodanie, usuniecie, edycja) należy wywołać metodę fireTableDataChanged Aby pobrać aktualnie kliknięty numer wiersza w komponencie jTable należy użyć getSelectedRow()
Sortowanie I Do nagłówków kolumn komponentu jTable dodać MouseListener pozwalający na sortowanie wartości, po kliknięciu na nazwę kolumny // metoda obsluguje klikanie na naglowku kolumny private void addHeaderListener() { jTable1.getTableHeader().addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) { // pobierz numer kolumny int col = jTable1.columnAtPoint(e.getPoint()); // uruchom funkcje sortujaca z modelu model.sortByColumn(col); model.fireTableDataChanged(); } }); }
Sortowanie II Metoda sortByColumn wykorzystuje funkcję sortującą: Collections.sort(data, comparator); Zaimplementuj dwa komparatory – do sortowania po imieniu i ocenie public class NameComparator implements Comparator public int compare(Osoba o1, Osoba o2) { return o1.imie.compareTo(o2.imie); } class OcenaComparator implements Comparator public int compare(Osoba o1, Osoba o2) { return o1.ocena < o2.ocena ? -1 : o1.ocena == o2.ocena ? 0 : 1; }
Serializacja Zapisać i odczytać listę z pliku za pomocą serializacji public static void saveToFile(List osoby, String filePath) { try { FileOutputStream fileOut = new FileOutputStream(filePath); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(osoby); out.close(); fileOut.close(); } catch (Exception ex) { } public static List loadFromFile(String filePath) { List osoby = new ArrayList<>(); try { FileInputStream fileIn = new FileInputStream(filePath); ObjectInputStream in = new ObjectInputStream(fileIn); osoby = (List ) in.readObject(); in.close(); fileIn.close(); } catch (Exception ex) { return osoby; } return osoby;
Serializacja II Wybór pliku do zapisu zrealizować poprzez komponent jFileChoser JFileChooser fileChooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("Bazy danych", "db"); fileChooser.addChoosableFileFilter(filter); fileChooser.setFileFilter(filter); int returnValue = fileChooser.showSaveDialog(this); //int returnValue = fileChooser.showOpenDialog(this); // odczyt if (returnValue == JFileChooser.APPROVE_OPTION) { Osoba.saveToFile(model.getData(), fileChooser.getSelectedFile().getAbsolutePath()); //listaOsob = Osoba.loadFromFile(fileChooser.getSelectedFile().getAbsolutePath()); // odczyt //model.setData(listaOsob); // odczyt //model.fireTableDataChanged(); // odczyt }