Guest User

Untitled

a guest
Dec 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.68 KB | None | 0 0
  1. /* PuntentabelModel2.java
  2.  * ============================================================
  3.  * Copyright (C) 2001-2011 Universiteit Gent
  4.  *
  5.  * Bijlage bij de cursus 'Programmeren 2'.
  6.  *
  7.  * Auteur: Kris Coolsaet
  8.  */
  9.  
  10. package prog2.mvc;
  11.  
  12. import java.sql.Connection;
  13. import java.sql.SQLException;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import javax.swing.Icon;
  17. import javax.swing.JFrame;
  18. import javax.swing.JScrollPane;
  19. import javax.swing.JTable;
  20. import javax.swing.table.AbstractTableModel;
  21. import javax.swing.table.TableColumnModel;
  22.  
  23. import prog2.io.Databank;
  24.  
  25. /**
  26.  * Model voor een tabel met punten van studenten. De verschillende
  27.  * kolommen bevatten de namen en voornamen van de studenten, de punten
  28.  * voor 1e en 2e semester, de gemiddelden over beide semesters en de
  29.  * graad.<p>
  30.  *
  31.  * Dit model haalt zijn gegevens uit de databank, via {@link PuntenDAO}, maar
  32.  * houdt die ook intern bij in een lijst.<p>
  33.  *
  34.  * Heeft ongeveer de zelfde functionaliteit als {@link PuntentabelModel1}
  35.  * maar ziet er iets beter uit.
  36.  */
  37.  
  38. public class PuntentabelModel2 extends AbstractTableModel {
  39.    
  40.     //
  41.     private List<Punten> data;
  42.    
  43.    
  44.     /**
  45.      * Construeer een tabel met de gegevens uit de databank.
  46.      */
  47.     public PuntentabelModel2 () {
  48.         try {
  49.             Connection conn = Databank.getConnection ();
  50.             try {
  51.                 PuntenDAO pdao = new PuntenDAO (conn);
  52.                 this.data = pdao.allePunten ();
  53.             }
  54.             finally {
  55.                 conn.close ();
  56.             }
  57.         }
  58.         catch (SQLException ex) {
  59.             System.out.println(ex);
  60.             this.data = new ArrayList<Punten> (); // lege lijst in geval van nood
  61.         }
  62.     }
  63.    
  64.     /*------------------------------------------------------------
  65.       Implementatie van AbstractTableModel
  66.       ------------------------------------------------------------*/
  67.    
  68.     private static final String[] COLUMN_NAMES
  69.         = { "Naam", "Voornaam", "1e sem", "2e sem", "Gem.", "Graad" };
  70.    
  71.     /**
  72.      * Naam van de opgegeven kolom. Implementatie van
  73.      * {@link AbstractTableModel}.  */
  74.     @Override
  75.     public String getColumnName (int column) {
  76.         return COLUMN_NAMES[column];
  77.     }
  78.    
  79.     /**
  80.      * Aantal kolommen in de tabel. Implementatie van
  81.      * {@link AbstractTableModel}.  */
  82.     public int getColumnCount () {
  83.         return COLUMN_NAMES.length;
  84.     }
  85.    
  86.     /**
  87.      * Aantal rijen in de tabel. Implementatie van {@link AbstractTableModel}.  */
  88.     public int getRowCount () {
  89.         return data.size();
  90.     }
  91.        
  92.     /**
  93.      * Waarde voor de gegeven cel. Implementatie van
  94.      * AbstractTableModel.  */
  95.     public Object getValueAt (int row, int column) {
  96.         Punten p = data.get (row);
  97.         switch (column) {
  98.             case 0:
  99.                 return p.getFamilienaam();
  100.             case 1:
  101.                 return p.getVoornaam();
  102.             case 2:
  103.             case 3:
  104.                 return new Integer (p.getPunten(column - 2));
  105.             case 4:
  106.                 return new Double (p.getGemiddelde ());
  107.             case 5:
  108.                 return p.getGraad ().getIcon();
  109.             default:
  110.                 return null; // this should not happen
  111.         }
  112.     }
  113.    
  114.     private static final Class[] COLUMN_CLASSES
  115.             = { String.class, String.class, Integer.class, Integer.class, Double.class, Icon.class };
  116.    
  117.     /**
  118.      * Klasse waartoe de gegeven kolom behoort. Implementatie van
  119.      * {@link AbstractTableModel}.
  120.      */
  121.     @Override
  122.     public Class getColumnClass (int column) {
  123.         return COLUMN_CLASSES [column];
  124.     }
  125.    
  126.     /**
  127.      * Mag inhoud worden gewijzigd? Implementatie van
  128.      * {@link AbstractTableModel}.  */
  129.     @Override
  130.     public boolean isCellEditable (int row, int column) {
  131.         return column == 2 || column == 3;
  132.     }
  133.    
  134.     /**
  135.      * Wijzig de inhoud van de gegeven cel. Implementatie van
  136.      * {@link AbstractTableModel}.  
  137.      */
  138.     public void setValueAt (Object value, int row, int column) {
  139.         if (column != 2 && column != 3)
  140.             return; // this should not happen
  141.        
  142.         try {
  143.             // pas aan in interne tabel EN in de databank
  144.             Punten p = data.get (row);
  145.             int mark = ((Integer)value).intValue ();
  146.             if (p.getPunten(column-2) != mark) {
  147.                 p.setPunten(column-2,mark);
  148.                 Connection conn = Databank.getConnection ();
  149.                 try {
  150.                     new PuntenDAO (conn).updatePunten (p, column - 2);
  151.                 } finally {
  152.                     fireTableRowsUpdated (row, row);  // meer dan deze cel alleen !
  153.                     conn.close ();
  154.                 }
  155.             }
  156.         }
  157.         catch (SQLException ex) {
  158.             System.out.println(ex);
  159.             // als oefening: waarschuw de gebruiker
  160.         }
  161.     }
  162.    
  163.     /*------------------------------------------------------------
  164.       Testprogramma
  165.       ------------------------------------------------------------*/
  166.  
  167.    
  168.     private static final int[] COLUMN_WIDTHS = { 180, 120, 60, 60, 60, 60 };
  169.    
  170.     /**
  171.      * Testprogramma.
  172.      */
  173.     public static void main (String[] s) {
  174.         JFrame window = new JFrame ("PuntentabelModel2.main (c) KC");
  175.        
  176.         PuntentabelModel2 model = new PuntentabelModel2 ();
  177.         JTable table = new JTable (model);
  178.        
  179.         // pas de groottes van de kolommen aan
  180.         TableColumnModel tcm = table.getColumnModel ();
  181.         for (int i = 0; i < 6; i++)
  182.             tcm.getColumn (i).setPreferredWidth (COLUMN_WIDTHS[i]);
  183.        
  184.         window.getContentPane ().add (new JScrollPane (table));
  185.         window.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  186.         window.pack ();
  187.         window.setVisible (true);
  188.     }
  189.    
  190. }
Add Comment
Please, Sign In to add comment