PDA

View Full Version : [JAVA] Aggiungere righe ad una JTable e aggiornare la GUI


VegetaSSJ5
20-08-2011, 18:29
Salve a tutti,
ho una piccola applicazione desktop in java. C'è una JTable che ho disegnato in NetBeans con 3 colonne ma senza righe. Ora vorrei che allo startup dell'applicazione mi venissero aggiunte delle righe alla tabella, così ho scritto il metodo seguente che svolge questo compito.private void setCustomAppParams() {
DefaultTableModel model = new DefaultTableModel();
System.out.println(svcOptionsTbl.getRowCount());
model = (DefaultTableModel)svcOptionsTbl.getModel();
model.addRow(new Object[]{"v1", "v2", null});
System.out.println(svcOptionsTbl.getRowCount());
svcOptionsTbl.repaint();
}Però la gui del programma non cambia, ovvero rimane ancora senza righe, nonostante il seconto println delle righe mi segnala giustamente una riga nella tabella.
Mi aiutate a risolvere questo problema?

TellaspallaBob
25-08-2011, 13:10
private void setCustomAppParams() {
DefaultTableModel model = new DefaultTableModel();
System.out.println(svcOptionsTbl.getRowCount());
model = (DefaultTableModel)svcOptionsTbl.getModel();
model.addRow(new Object[]{"v1", "v2", null});
System.out.println(svcOptionsTbl.getRowCount());
svcOptionsTbl.repaint();
}

Qual'è il model originale della JTable?
Quando la crei, nel setModel gli imposti un DefaultTableModel (già riempito immagino, o quantomeno che dichiari la struttura, perché altrimenti lui non conosce la struttura della tabella).

Object [][] rowdata = {};
Object [] columnNames = {"A", "B", "C"};
DefaultTableModel model = new DefaultTableModel(rowdata, columnNames);

Come vedi do al model un numero di informazioni minime
poi in un action event lo riempio senza problemi

public void actionPerformed(ActionEvent e)
{
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(new Object[]{"V1."+model.getRowCount(), "V2."+model.getRowCount(), null});
}

Se commenti le prime due righe

Object [][] rowdata = {};
Object [] columnNames = {"A", "B", "C"};

La tabella non si riempie più e se provi nel TUO codice a leggere i valori delle celle vedrai che non c'è nulla e che ti va in errore a dispetto di quello che ti dice il rowcount.