Skip to content
Snippets Groups Projects
Commit 6aa1db11 authored by Eckl, Máté's avatar Eckl, Máté
Browse files

8. labor kötelező feladatai kész vannak.

Mivel minden bezáráskor a program felülírja a students.dat fájlt, ezért azt kivettem a gitből, helyette beraktam egy .students.dat nevűt, így mindig megmarad a feladat eredeti bemeneti fájlja.
Egyébként nem tragédia, ha nélküle indítjuk el, csak hirtelen üres lesz a táblázat.
parent b82bb0a5
Branches
No related tags found
No related merge requests found
students.dat
File added
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;
}
}
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();
}
}
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);
}
}
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment