/* * TableExpandGUI.java * * Created on July 9, 2007, 3:37 AM */ /** * * @author kinus */ public class TableExpandGUI extends javax.swing.JFrame { /** Creates new form TableExpandGUI */ public TableExpandGUI() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null} }, new String [] { "Name", "Surname", "Birthday" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); jTable1.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { jTable1PropertyChange(evt); } }); jScrollPane1.setViewportView(jTable1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(28, Short.MAX_VALUE)) ); pack(); }// //GEN-END:initComponents private void jTable1PropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jTable1PropertyChange /* * First get the row count of the current table * Then check if there is anything in the first column of the last row (or any other column) * In the first case there is something so we'll do nothing */ int last = jTable1.getRowCount(); if (jTable1.getValueAt(last-1,0) == null){ //first column of last row is empty, so do nothing } /* Here there is something in the last row so we need to find some way of handling it */ else{ /* First create a new array of objects based on the original table * The new object needs +1 rows. * Then populate the new Object with the values in the old Object */ Object o[][] = new Object[jTable1.getRowCount()+1][jTable1.getColumnCount()]; for (int i = 0; i < jTable1.getRowCount(); i++){ //loop through the rows for (int j = 0; j < jTable1.getColumnCount(); j++){ //loop through the columns o[i][j] = jTable1.getValueAt(i,j); //populate the new Object } } /* Set the last row to null values */ for (int k = 0; k < jTable1.getColumnCount(); k++){ o[jTable1.getRowCount()][k] = null; } jTable1.setModel(new javax.swing.table.DefaultTableModel( o, new String [] { "Firstname", "Surname", "Birthday" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); } }//GEN-LAST:event_jTable1PropertyChange /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TableExpandGUI().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration//GEN-END:variables }