diff --git a/8. labor/SwingMvcLab/src/swingmvclab/Student.java b/8. labor/SwingMvcLab/src/swingmvclab/Student.java index a2e81985e384238ea3cb43ca18211b9ebc066071..d6f73d4407e6f810a75fa59f79b220efad1fea69 100644 --- a/8. labor/SwingMvcLab/src/swingmvclab/Student.java +++ b/8. labor/SwingMvcLab/src/swingmvclab/Student.java @@ -58,7 +58,13 @@ public class Student implements Serializable { // Osztályzat beállítása. public void setGrade(Integer grade) { - this.grade = grade; + if (grade>5) + { + this.grade = 1; + System.err.println("Nem lehetsz ötösnél jobb, ezért most megbuksz!"); + } + else + this.grade = grade; } // Hallgató létrehozása diff --git a/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java b/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java index 235f7d529c1d6a757ea0e102586e6b64d71c467f..4e85b59157f9dd1fb61cb85c953371433b281742 100644 --- a/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java +++ b/8. labor/SwingMvcLab/src/swingmvclab/StudentData.java @@ -90,6 +90,7 @@ public class StudentData extends AbstractTableModel{ break; } students.set(i, s); + this.fireTableRowsUpdated(i, i); } } diff --git a/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java b/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java index 142912ceab55d166b41a94c5c24a45c2b2025fec..79dec31243de2ca187b7e5e63948cb4dd9fc69d2 100644 --- a/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java +++ b/8. labor/SwingMvcLab/src/swingmvclab/StudentFrame.java @@ -1,6 +1,7 @@ package swingmvclab; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; @@ -20,6 +21,10 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; +import javax.swing.RowSorter; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableModel; +import javax.swing.table.TableRowSorter; /* * A megjelenítendõ ablakunk osztálya. @@ -44,7 +49,15 @@ public class StudentFrame extends JFrame { //táblázat JTable jt=new JTable(data); jt.setFillsViewportHeight(rootPaneCheckingEnabled); - this.add(new JScrollPane(jt),BorderLayout.CENTER); + jt.setRowSorter(new TableRowSorter<StudentData>(data)); + + //színezés + jt.setDefaultRenderer(String.class, new StudentTableCellRenderer(jt.getDefaultRenderer(String.class))); + jt.setDefaultRenderer(Boolean.class, new StudentTableCellRenderer(jt.getDefaultRenderer(Boolean.class))); + jt.setDefaultRenderer(Number.class, new StudentTableCellRenderer(jt.getDefaultRenderer(Number.class))); + //------------------------------------------------------------------------------------------------------- + + this.add(new JScrollPane(jt),BorderLayout.CENTER); //hozzáadó sor JPanel adderPanel=new JPanel(new FlowLayout()); @@ -115,4 +128,34 @@ public class StudentFrame extends JFrame { StudentFrame sf = new StudentFrame(); sf.setVisible(true); } + + private class StudentTableCellRenderer implements TableCellRenderer { + private final TableCellRenderer renderer; + public StudentTableCellRenderer(TableCellRenderer defRenderer) + { + this.renderer = defRenderer; + } + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, + int row, int column) + { + Component component = renderer.getTableCellRendererComponent( + table, value, isSelected, hasFocus, row, column); + Student actualStudent = data.students.get(table.getRowSorter().convertRowIndexToModel(row)); + // megállapítjuk, hogy bukásra áll-e vagy sem, + Color bg; + // és ez alapján átállítjuk a komponens háttérszínét: + if(actualStudent.getGrade()<=1) + bg=Color.RED; + else + bg=Color.GREEN; + component.setBackground(bg); + + return component; + } + + } + }