Passare dati da una JTable a un JFrame
Lo scenario è questo: abbiamo dei dati su un db che visualiziamo tramite JTable; quando vogliamo modificare un record lo selezioniamo e passiamo i valro a un JFrame che si occuperà di fare questo.
Come fare?
La cosa non è molto difficile.
Dopo aver aggiunto un JButton apposito dobbiamo creare un evento.
Io l'ho fatto fare a NetBeans (sono un pò pigro ).
Questo è il contenuto del nostro evento:
private void btnModifyActionPerformed(java.awt.event.ActionEvent evt) {
if (tableData.getRowCount() > 0 && tableData.getColumnCount() > 0) {
if (tableData.getSelectedRow() > 0) {
ArrayList<String> list = new ArrayList<String>();
int numCol = model.getColumnCount();
Object value = null;
for (int i = 0; i < numCol; i++) {
value = tableData.getValueAt(tableData.getSelectedRow(), i);
list.add(value.toString());
}
FormModifica form = new FormModifica(list);
form.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "Select a row first");
}
} else {
JOptionPane.showMessageDialog(null, "Do the connection first");
}
}
Prima ho fatto un controllo per vedere se la JTable è vuota.
Il secondo controllo riguarda se è stata selezionata una riga (sennò che dati gli passiamo?).
Se i controlli vanno a buon fine creiamo un ArrayList<String> per salvare i valori delle celle della riga selezionata.
Con numCol contiamo il numero di colonne (model è il DefaultTableModel impostato sulla JTable).
Nel ciclo salviamo tutti i valori della riga selezionata e li aggiungiamo all'ArrayList.
Poi richiamo il JFrame per la modifica (FormModifica).
Questo JFrame avrà un costruttore apposito per "accogliere" l'ArrayList:
public class FormModifica extends javax.swing.JFrame {
private DBManager dbman = DBManager.getInstance();
private String[] valori;
private String id;
private String name;
private String author;
private String editor;
private String price;
private String isbn;
private String note;
public FormModifica(ArrayList<String> list) {
valori = (String[]) list.toArray(new String[list.size()]);
id = valori[0];
name = valori[1];
author = valori[2];
editor = valori[3];
price = valori[4];
isbn = valori[5];
note = valori[6];
initComponents(); //netbeans
setLocationRelativeTo(null); //netbeans
}
........
Qui prendo i valori passati e li salvo in oggetti String con i quali andrò a riempire che i componenti che mi servono (JTeaxtField, ecc).
java jframe jpanel arraylist netbeans
5 Commenti
Grazie mille sei molto gentile. Per me questo è arabo per me.. non capisco perchè se creo una jtable trascinandola e dunque il codice è generato automaticamente poi dei mettermi a smanettare codice creando jtable e per far che??? capisco che è corretto fare così altrimenti non lo diresti ma faccio fatica a comprendere. comunque ti mando la mail ;)
08/06/2012tableData è il nome della mia JTable.<br />ci devi mettere il nome che gli hai dato tu (netbeans di default mette qualcosa tipo JTable1).<br />model è il Model della JTable.<br />ho creato una classe MyTableModel che estende DefaultTableModel in modo da personalizzare alcune cose.<br />volendo puoi semplicemente istanziare un DefaultTableModel e poi lo devi impostare come model della tua JTable.<br />purtroppo nn ho mai fatto una guida su questo.<br />se mi mandi una mail all'indirizzo che trovi sopra cerco di spiegarti meglio.
08/06/2012ok dunque il procedimento è corretto. Inserisco il bottone, ci creo l'evento e ci inserisco quel codice. COme errore non trova la variabile tableData e model. Non sono definite prima immagino.<br />E la seconda parte di codice damettere nel JFrame in realtà non so dove inserirlo.
08/06/2012più autmatico nn penso.<br />alla fine sei sempre te che devi implementare i metodi.<br />netbeans ti scrive il codice per l'evento, ma sei che devi implementarlo.<br />che errore ti da di preciso?
08/06/2012ciao... sembrerebbe tutto facile ma...<br />io sto cercando di fare la stessa cosa. Da una jTable devo selezionare una riga (elenco film con titolo, regista, anno ecc.) e aprire una scheda personalizzata di quel film. Dunque seleziono la riga come dici tu, al bottone inserisco un evento e ci metto quel codice? A me da errore su Tabledata e model ovviamente..<br />C'è un modo più automatico con NetBeans??
08/06/2012