© Sofia ZAIDENBERGCNRS Mai JTable
© Sofia ZAIDENBERG CNRS Mai JDBC JTable l JTable un composant Swing complexe pour présenter et éditer des données sous forme de table. Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)}, {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)}, {"Kathy", "Walrath", "Chasing toddlers", new Integer(2), new Boolean(false)}, {"Mark", "Andrews", "Speed reading", new Integer(20), new Boolean(true)}, {"Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)} }; String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; JTable table = new JTable(data, columnNames);
© Sofia ZAIDENBERG CNRS Mai JDBC JTable Deux constructeurs qui acceptent directement des données : l JTable(Object[][] rowData, Object[] columnNames) l JTable(Vector rowData, Vector columnNames) l Simplicité l Mais l chaque cellule est éditable traite toutes les données de manière identique (affichage sous forme de String quel que soit le type de la donnée) Si les données ne sont pas déjà sous la forme d’un tableau (ou d’un Vector) nécessité de les transposer dans une telle structure
© Sofia ZAIDENBERG CNRS Mai JDBC JTableModel JTable Si les données ne sont pas déjà sous une forme « tabulaire » et/ou si on ne veut pas avoir les restrictions précédentes il faut fournir un objet TableModel au composant JTable qui permet à l’objet JTable de découvrir la valeur de chaque cellule : l JTable(TableModel data) l public void setModel(TableModel data) JTable ne contient pas les données mais c’est une vue sur les données « JTable doesn’t contain or cache data; it’s simply a view of your data. » Modèle Vue Contrôleur Le fameux modèle* MVC (Model View Controler) issu de SmallTalk * design pattern
© Sofia ZAIDENBERG CNRS Mai JDBC JTable l JTableModel l interface définie dans le package javax.swing.table intermédiaire entre le composant JTable et les données qu’il affiche tout composant JTable utilise un objet qui implémente JTableModel pour encapsuler les données qu’il visualise. Class getColumnClass(int columnIndex) int getColumnCount() String getColumnName(int columnIndex) int getRowCount() Object getValueAt(int rowIndex, int columnIndex) void addTableModelListener(TableModelListener l) void removeTableModelListener(TableModelListener l) boolean isCellEditable(int rowIndex, int columnIndex) void setValueAt(Object aValue, int rowIndex, int columnIndex) JTableModel JTable Vue Contrôleur Modèle
© Sofia ZAIDENBERG CNRS Mai JDBC JTable JTableModel DefaultTableModel AbstractTableModel Implémentation partielle de JTableModel, seules demeurent abstraites : int getColumnCount() int getRowCount() Object getValueAt(int rowIndex, int columnIndex) Pour une application nécessitant un table non éditable il suffit de donner une implémentation à ces méthodes Implémentation « simple » de JTableModel lorsque les données sont exprimées sous la forme de tableaux (ou vecteurs) de lignes, chaque ligne étant elle même un tableau (ou un vecteur) d’objets. Les constructeurs JTable(Object[][] rowData, Object[] columnNames) et JTable(Vector rowData, Vector columnNames) initialisent et utilisent un objet DefaultTableModel