Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* PuntentabelModel2.java
- * ============================================================
- * Copyright (C) 2001-2011 Universiteit Gent
- *
- * Bijlage bij de cursus 'Programmeren 2'.
- *
- * Auteur: Kris Coolsaet
- */
- package prog2.mvc;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.Icon;
- import javax.swing.JFrame;
- import javax.swing.JScrollPane;
- import javax.swing.JTable;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.table.TableColumnModel;
- import prog2.io.Databank;
- /**
- * Model voor een tabel met punten van studenten. De verschillende
- * kolommen bevatten de namen en voornamen van de studenten, de punten
- * voor 1e en 2e semester, de gemiddelden over beide semesters en de
- * graad.<p>
- *
- * Dit model haalt zijn gegevens uit de databank, via {@link PuntenDAO}, maar
- * houdt die ook intern bij in een lijst.<p>
- *
- * Heeft ongeveer de zelfde functionaliteit als {@link PuntentabelModel1}
- * maar ziet er iets beter uit.
- */
- public class PuntentabelModel2 extends AbstractTableModel {
- //
- private List<Punten> data;
- /**
- * Construeer een tabel met de gegevens uit de databank.
- */
- public PuntentabelModel2 () {
- try {
- Connection conn = Databank.getConnection ();
- try {
- PuntenDAO pdao = new PuntenDAO (conn);
- this.data = pdao.allePunten ();
- }
- finally {
- conn.close ();
- }
- }
- catch (SQLException ex) {
- System.out.println(ex);
- this.data = new ArrayList<Punten> (); // lege lijst in geval van nood
- }
- }
- /*------------------------------------------------------------
- Implementatie van AbstractTableModel
- ------------------------------------------------------------*/
- private static final String[] COLUMN_NAMES
- = { "Naam", "Voornaam", "1e sem", "2e sem", "Gem.", "Graad" };
- /**
- * Naam van de opgegeven kolom. Implementatie van
- * {@link AbstractTableModel}. */
- @Override
- public String getColumnName (int column) {
- return COLUMN_NAMES[column];
- }
- /**
- * Aantal kolommen in de tabel. Implementatie van
- * {@link AbstractTableModel}. */
- public int getColumnCount () {
- return COLUMN_NAMES.length;
- }
- /**
- * Aantal rijen in de tabel. Implementatie van {@link AbstractTableModel}. */
- public int getRowCount () {
- return data.size();
- }
- /**
- * Waarde voor de gegeven cel. Implementatie van
- * AbstractTableModel. */
- public Object getValueAt (int row, int column) {
- Punten p = data.get (row);
- switch (column) {
- case 0:
- return p.getFamilienaam();
- case 1:
- return p.getVoornaam();
- case 2:
- case 3:
- return new Integer (p.getPunten(column - 2));
- case 4:
- return new Double (p.getGemiddelde ());
- case 5:
- return p.getGraad ().getIcon();
- default:
- return null; // this should not happen
- }
- }
- private static final Class[] COLUMN_CLASSES
- = { String.class, String.class, Integer.class, Integer.class, Double.class, Icon.class };
- /**
- * Klasse waartoe de gegeven kolom behoort. Implementatie van
- * {@link AbstractTableModel}.
- */
- @Override
- public Class getColumnClass (int column) {
- return COLUMN_CLASSES [column];
- }
- /**
- * Mag inhoud worden gewijzigd? Implementatie van
- * {@link AbstractTableModel}. */
- @Override
- public boolean isCellEditable (int row, int column) {
- return column == 2 || column == 3;
- }
- /**
- * Wijzig de inhoud van de gegeven cel. Implementatie van
- * {@link AbstractTableModel}.
- */
- public void setValueAt (Object value, int row, int column) {
- if (column != 2 && column != 3)
- return; // this should not happen
- try {
- // pas aan in interne tabel EN in de databank
- Punten p = data.get (row);
- int mark = ((Integer)value).intValue ();
- if (p.getPunten(column-2) != mark) {
- p.setPunten(column-2,mark);
- Connection conn = Databank.getConnection ();
- try {
- new PuntenDAO (conn).updatePunten (p, column - 2);
- } finally {
- fireTableRowsUpdated (row, row); // meer dan deze cel alleen !
- conn.close ();
- }
- }
- }
- catch (SQLException ex) {
- System.out.println(ex);
- // als oefening: waarschuw de gebruiker
- }
- }
- /*------------------------------------------------------------
- Testprogramma
- ------------------------------------------------------------*/
- private static final int[] COLUMN_WIDTHS = { 180, 120, 60, 60, 60, 60 };
- /**
- * Testprogramma.
- */
- public static void main (String[] s) {
- JFrame window = new JFrame ("PuntentabelModel2.main (c) KC");
- PuntentabelModel2 model = new PuntentabelModel2 ();
- JTable table = new JTable (model);
- // pas de groottes van de kolommen aan
- TableColumnModel tcm = table.getColumnModel ();
- for (int i = 0; i < 6; i++)
- tcm.getColumn (i).setPreferredWidth (COLUMN_WIDTHS[i]);
- window.getContentPane ().add (new JScrollPane (table));
- window.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
- window.pack ();
- window.setVisible (true);
- }
- }
Add Comment
Please, Sign In to add comment