Comment mettre à jour(actualisation) JTable avec des données provenant d'une base de données
Je suis en train de mettre à jour un JTable
après je ajouter ou supprimer un enregistrement de la base de données (MS Access), mais il ne semble pas fonctionner. Aussi, je ne comprends pas pourquoi mes noms de colonnes ne s'affichent pas. Voici mon code:
package Administrator13_03_13;
public class Arsti2 {
JFrame main = new JFrame("Ārst");
JPanel tP = new JPanel();
JPanel bP = new JPanel();
JButton one = new JButton("Test");
JTable table = new JTable();
DefaultTableModel model;
Vector columnNames = new Vector();
Vector data = new Vector();
Arsti2() {
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setSize(840,300);
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String Base = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=SL.mdb";
Connection con = DriverManager.getConnection(Base,"","");
Statement st = con.createStatement();
ResultSet res = st.executeQuery("SELECT * FROM Arsti");
ResultSetMetaData rsmd = res.getMetaData();
int column = rsmd.getColumnCount();
columnNames.addElement("ID");
columnNames.addElement("Vards");
columnNames.addElement("Uzvards");
columnNames.addElement("Dzimums");
columnNames.addElement("Personas kods");
columnNames.addElement("Telefona numurs");
columnNames.addElement("Nodalas ID");
columnNames.addElement("Amata ID");
while(res.next()) {
Vector row = new Vector(column);
for(int i=1; i<=column; i++) {
row.addElement(res.getObject(i));
}
data.addElement(row);
}
model = new DefaultTableModel(data,columnNames);
table.setModel(model);
//model.fireTableDataChanged();
tP.add(table);
bP.add(one);
main.add(tP,BorderLayout.NORTH);
main.add(bP,BorderLayout.SOUTH);
} catch(Exception e) {
e.printStackTrace();
}
main.setVisible(true);
one.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evnt1) {
model.fireTableDataChanged();
}
});
}
public static void main(String[] args) {
new Arsti2();
}
}
Pour mieux aider plus tôt, après une SSCCE.
vous débarrasser de la columnNames/champs de données et de parler à la modèle seulement: DefaultTableModel a api pour ajouter des lignes/supprimer toutes les lignes, il suffit de lire sa doc api 🙂
vous débarrasser de la columnNames/champs de données et de parler à la modèle seulement: DefaultTableModel a api pour ajouter des lignes/supprimer toutes les lignes, il suffit de lire sa doc api 🙂
OriginalL'auteur usr999 | 2013-03-17
Vous devez vous connecter pour publier un commentaire.
Juste
model.fireTableDataChanged();
coutume de travail vous devez recharger votre modèle à partir de la base de donnéesCela devrait fonctionner:
Mise à jour de ma réponse
modèle.fireTableDataChanged(); n'est pas nécessaire. DefaultTableModel lui-même gère ce quand jamais leur est un changement dans les données.
Il fait, mais il ne remplace pas l'ancienne table, il ajoute un plus au fond. funkyimg.com/u2/3247/210/372786Untitled.jpg
Je downvote chaque fois que je vois un code incorrect. Il est facile de l'obtenir, elle est revenue, mais: faire un peu de recherche et de corriger votre code 🙂 BTW: il n'est pas obligatoire pour afficher les réponses, c'est effectivement découragé si vous ne les connaissez pas ...
OriginalL'auteur Sach
Les noms de colonnes ne s'affichent pas, sauf si vous ajoutez un conteneur (comme un JScrollPane).
add(new JScrollPane(table));
devrait être suffisant.
OriginalL'auteur Jeroen Vannevel