diff --git a/8. labor/SwingMvcLab/.gitignore b/8. labor/SwingMvcLab/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..82276168c1c8eb35b95cf81eb35caea497dca719 --- /dev/null +++ b/8. labor/SwingMvcLab/.gitignore @@ -0,0 +1 @@ +students.dat diff --git a/8. labor/SwingMvcLab/.students.dat b/8. labor/SwingMvcLab/.students.dat new file mode 100644 index 0000000000000000000000000000000000000000..05be3d7be4949718cc54c69762916c02b2054285 Binary files /dev/null and b/8. labor/SwingMvcLab/.students.dat differ diff --git a/8. labor/SwingMvcLab/src/swingmvclab/Student.java b/8. labor/SwingMvcLab/src/swingmvclab/Student.java new file mode 100644 index 0000000000000000000000000000000000000000..a2e81985e384238ea3cb43ca18211b9ebc066071 --- /dev/null +++ b/8. labor/SwingMvcLab/src/swingmvclab/Student.java @@ -0,0 +1,72 @@ +package swingmvclab; + +import java.io.Serializable; + +/* + * Egy hallgató adatait tároló osztály. + * + * NE MÓDOSÍTSD! + */ +public class Student implements Serializable { + + // Hallgató neve + private String name; + + // Hallgató Neptun-kódja. + private String neptun; + + // Van-e aláírása. + private boolean signature; + + // A megszerzett osztályzat. + private int grade; + + // Hallgató nevének lekérdezése. + public String getName() { + return name; + } + + // Hallgató nevének beállítása. + public void setName(String name) { + this.name = name; + } + + // Hallgató Neptun-kódjának lekérdezése. + public String getNeptun() { + return neptun; + } + + // Hallgató Neptun-kódjának beállítása. + public void setNeptun(String neptun) { + this.neptun = neptun; + } + + // Aláírás meglétének lekérdezése. + public Boolean hasSignature() { + return signature; + } + + // Aláírás meglétének beállítása. + public void setSignature(Boolean signature) { + this.signature = signature; + } + + // Osztályzat lekérdezése. + public Integer getGrade() { + return grade; + } + + // Osztályzat beállítása. + public void setGrade(Integer grade) { + this.grade = grade; + } + + // Hallgató létrehozása + public Student(String name, String neptun, Boolean signature, Integer grade) { + this.name = name; + this.neptun = neptun; + this.signature = signature; + this.grade = grade; + } + +} diff --git a/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java b/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java new file mode 100644 index 0000000000000000000000000000000000000000..235f7d529c1d6a757ea0e102586e6b64d71c467f --- /dev/null +++ b/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java @@ -0,0 +1,101 @@ +package swingmvclab; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.event.TableModelListener; +import javax.swing.table.AbstractTableModel; + +/* + * A hallgatók adatait tároló osztály. + */ +public class StudentData extends AbstractTableModel{ + + /* + * Ez a tagváltozó tárolja a hallgatói adatokat. + * NE MÓDOSÍTSD! + */ + List<Student> students = new ArrayList<>(); + + @Override + public int getRowCount() { + return students.size(); + } + + @Override + public int getColumnCount() { + return 4; + } + + @Override + public Object getValueAt(int i, int i1) { + Student student = students.get(i); + switch(i1) { + case 0: return student.getName(); + case 1: return student.getNeptun(); + case 2: return student.hasSignature(); + default: return student.getGrade(); + } + } + + @Override + public void addTableModelListener(TableModelListener tl) { + super.addTableModelListener(tl); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public String getColumnName(int i) + { + switch(i) + { + case 0: return "Név"; + case 1: return "Neptun"; + case 2: return "Aláírás"; + default: return "Jegy"; + } + } + + @Override + public Class<?> getColumnClass(int i) + { + Student s=students.get(0); + switch(i) + { + case 0: return String.class; + case 1: return String.class; + case 2: return Boolean.class; + default: return Integer.class; + } + } + + @Override + public boolean isCellEditable(int i, int i1) + { + boolean[] b={false,false,true,true}; + return (i1<getColumnCount() && i1>=0)?b[i1]:false; + } + + @Override + public void setValueAt(Object o, int i, int i1) + { + Student s=students.get(i); + if(i1>=2 && i1<=3) + { + switch(i1) + { + case 2: + s.setSignature((Boolean)o); + break; + default: + s.setGrade((Integer)o); + break; + } + students.set(i, s); + } + } + + public void addStudent(String name, String neptun) + { + students.add(new Student(name, neptun, Boolean.FALSE, 0)); + this.fireTableDataChanged(); + } +} diff --git a/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java b/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..142912ceab55d166b41a94c5c24a45c2b2025fec --- /dev/null +++ b/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java @@ -0,0 +1,118 @@ +package swingmvclab; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; + +/* + * A megjelenítendõ ablakunk osztálya. + */ +public class StudentFrame extends JFrame { + + /* + * Ebben az objektumban vannak a hallgatói adatok. + * A program indulás után betölti az adatokat fájlból, bezáráskor pedig kimenti oda. + * + * NE MÓDOSÍTSD! + */ + private StudentData data; + private JTextField newName; + private JTextField newNeptun; + /* + * Itt hozzuk létre és adjuk hozzá az ablakunkhoz a különbözõ komponenseket + * (táblázat, beviteli mezõ, gomb). + */ + private void initComponents() { + this.setLayout(new BorderLayout()); + //táblázat + JTable jt=new JTable(data); + jt.setFillsViewportHeight(rootPaneCheckingEnabled); + this.add(new JScrollPane(jt),BorderLayout.CENTER); + + //hozzáadó sor + JPanel adderPanel=new JPanel(new FlowLayout()); + adderPanel.add(new JLabel("Név:")); + newName = (JTextField)adderPanel.add(new JTextField(15)); //csak azért, mert így is lehet :) + + adderPanel.add(new JLabel("Neptun:")); + newNeptun = (JTextField)adderPanel.add(new JTextField(6)); + + JButton adderButton = (JButton) adderPanel.add(new JButton("Felvesz")); + adderButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent ae) + { + data.addStudent(newName.getText(), newNeptun.getText()); + jt.updateUI(); + } + }); + this.add(adderPanel,BorderLayout.SOUTH); + } + + /* + * Az ablak konstruktora. + * + * NE MÓDOSÍTSD! + */ + @SuppressWarnings("unchecked") + public StudentFrame() { + super("Hallgatói nyilvántartás"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + + // Induláskor betöltjük az adatokat + try { + data = new StudentData(); + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students.dat")); + data.students = (List<Student>)ois.readObject(); + ois.close(); + } catch(Exception ex) { + ex.printStackTrace(); + } + + // Bezáráskor mentjük az adatokat + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + try { + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students.dat")); + oos.writeObject(data.students); + oos.close(); + } catch(Exception ex) { + ex.printStackTrace(); + } + } + }); + + // Felépítjük az ablakot + setMinimumSize(new Dimension(500, 200)); + initComponents(); + } + + /* + * A program belépési pontja. + * + * NE MÓDOSÍTSD! + */ + public static void main(String[] args) { + // Megjelenítjük az ablakot + StudentFrame sf = new StudentFrame(); + sf.setVisible(true); + } +} diff --git a/8. labor/java_8_swing_mvc_tasks.pdf b/8. labor/java_8_swing_mvc_tasks.pdf new file mode 100644 index 0000000000000000000000000000000000000000..14f0a881bff2062498c93dbeb6271aa35fefc4e2 Binary files /dev/null and b/8. labor/java_8_swing_mvc_tasks.pdf differ