tutorial aks refresh jtable

refresh - aks - Actualizar Jtable



aks tutorial (2)

Llamo al método initTable seguido por loadTable (). Estoy seguro de que hay muchas otras formas, pero esto funciona como acharm.

private void initBerkheimerTable() { tblBerkheimer = new JTable(); tblBerkheimer.getSelectionModel().addListSelectionListener(new SelectionListener()); tblBerkheimer.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tblBerkheimer.setModel(new DefaultTableModel( new Object[][] { }, new String[] { "Id", "Name", "Berkheimer PSD", "Rate", "Current PSD", "Current Rate" } ) { Class[] columnTypes = new Class[] { String.class, String.class, String.class, String.class, String.class, String.class }; public Class getColumnClass(int columnIndex) { return columnTypes[columnIndex]; } boolean[] columnEditables=new boolean[]{false,false,false,false,false,false,false,false,false,false}; public boolean isCellEditable(int row, int column) { return columnEditables[column]; } }); scrollPane.setViewportView(tblBerkheimer); add(scrollPane); } private void loadTable(){ PreparedStatement ps=null; ResultSet rs=null; try { PayrollPsdAuditing.payroll=Database.connectToSQLServerDataBase(PayrollPsdAuditing.payrollIni); ps=PayrollPsdAuditing.payroll.prepareStatement( "SELECT a.EMPLOYID, " + " a.NAME, " + " a.PSD_CODE, " + " a.RATE, " + " b.STRINGS_I_2 as CURRENT_PSD, " + " c.lcltaxrt as CURRENT_RATE " + "FROM PYRL_PSD_VALIDATION a, " + " EX010130 b, " + " UPR41400 c " + "WHERE a.employid=b.empid_i " + " AND c.localtax=b.strings_i_2"); rs=ps.executeQuery(); while(rs.next()) { Swing.fillJTable(tblBerkheimer, new String[]{rs.getString("EMPLOYID").trim() ,rs.getString("NAME").trim() ,rs.getString("PSD_CODE").trim() ,String.valueOf(rs.getDouble("RATE")) ,rs.getString("CURRENT_PSD").trim() ,String.valueOf(rs.getDouble("CURRENT_RATE")/100000)}); } } catch (Exception ex) { ex.printStackTrace(); } finally { Database.close(PayrollPsdAuditing.payroll); } }

Tengo una JTable creada a partir de Vector. ¿Cómo se puede actualizar la JTable para mostrar datos nuevos que se agregan al Vector?


Su JTable debe actualizarse automáticamente cuando ocurre un cambio en TableModel. Estoy dando un gran paso aquí, pero supongo que no estás usando tu propio TableModel y simplemente llamé al constructor de JTable con tu Vector. En este caso, puede obtener un gancho en TableModel y convertirlo en un DefaultTableModel y luego llamar a uno de sus métodos de notificación para que la JTable sepa de un cambio, algo así como:

DefaultTableModel model = (DefaultTableModel)table.getModel(); model.fireTableChanged(new TableModelEvent(........));

Lo que realmente recomendaría es usar su propio TableModel a menos que esto sea algo muy trivial, pero el hecho de que esté actualizando los datos indica que no es así.

Consulte el tutorial de sol sobre cómo trabajar con tablas , en particular la sección sobre cómo escuchar los cambios de datos .

Puede parecer más trabajo por adelantado, pero le ahorrará muchos dolores de cabeza a largo plazo y es la forma correcta de hacerlo