Bonjour,
Je suis face à un problème que je n'arrive pas à résoudre.
J'ai suivi ce tuto http://baptiste-wicht.developpez.com.../swing/jtable/ pour implémenter un jtable.
Tout fonctionne correctement, mais maintenant je voudrais ajouter des lignes à partir d'autres classes.
Le problème est que les données sont bien ajoutées dans mon arrayList, sauf que mon panel (ou ma table) n'est pas rafraîchie donc l'affichage n'est pas fait.
Voici mes deux classes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class PanneauTicket extends JPanel implements ActionListener {
private AjoutDynamique Ajout = new AjoutDynamique();
private JTable tableau = new JTable(Ajout);
private JScrollPane scroll = new JScrollPane(tableau);
public PanneauTicket ()
{
this.setBorder(BorderFactory.createTitledBorder("Ticket"));
this.setLayout(new BorderLayout());
tableau.getColumnModel().getColumn(0).setMaxWidth(50);
tableau.getColumnModel().getColumn(1).setMaxWidth(200);
tableau.getColumnModel().getColumn(2).setMaxWidth(50);
tableau.setRowHeight(20);
// Permet de centrer le texte dans les cellules
DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
custom.setHorizontalAlignment(JLabel.CENTER);
for (int i=0 ; i<tableau.getColumnCount() ; i++)
tableau.getColumnModel().getColumn(i).setCellRenderer(custom);
scroll.setPreferredSize(new Dimension(250,290));
this.add(scroll, BorderLayout.CENTER);
}
public PanneauTicket(String nb1, String nb2, String nb3)
{
Ajout.addArticle(nb1, nb1, nb3);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
Ajout.fireTableDataChanged();
}
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| public class AjoutDynamique extends AbstractTableModel
{
public static List<Articles> Article = new ArrayList<Articles>();
private final String[] entetes = {"Quantité", "Article", "Prix"};
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return entetes.length;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return Article.size();
}
public String getColumnName(int columnIndex) {
return entetes[columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
switch(columnIndex){
case 0:
return Article.get(rowIndex).getQuantite();
case 1:
return Article.get(rowIndex).getNomArticle();
case 2:
return Article.get(rowIndex).getPrixArticle();
default:
return null; //Ne devrait jamais arriver
}
}
public void addArticle(String Quantite, String article, String prix) {
Article.add(new Articles(Quantite, article, prix));
fireTableRowsInserted(Article.size() -1, Article.size() -1);
fireTableDataChanged();
AffichePrixTotal();
}
public void removeArticle(int rowIndex) {
Article.remove(rowIndex);
fireTableRowsDeleted(rowIndex, rowIndex);
AffichePrixTotal();
}
public void AffichePrixTotal()
{
float tempo=0;
float PrixTotal=0;
if(Article.size()==0)
{
PrixTotal = 0;
PanneauPrix.prix.setText(PrixTotal+"");
}
else
{
for(int i=0; i<Article.size();i++) // Boucle pour récupérer la valeure du prix dans chaque ligne du tableau
{
String tempoString = this.getValueAt(i, 2).toString();
tempo = Float.valueOf(tempoString.trim()).floatValue();
PrixTotal += tempo; // Additionne chaque valeure de la colonne prix (de la ligne i) au prix total
}
PanneauPrix.prix.setText(PrixTotal+"");
}
}
} |
Pour ajouter des données, je fais un:
new PanneauTicket("2","Bannanes","4");
Le code fonctionne si j'ajoute un écouteur à un bouton dans ma classe PanneauTicket. Et comme j'ai pas mal de boutons qui peuvent ajouter des données dans ma jtable, j'aimerai éviter cette méthode!
Y'a il un autre moyen de rafraichir ma jtable? J'ai bien sûr essayé avec un this.repaint() ou un Ajout.fireTableDataChanged(); dans mon constructeur surchargé mais rien ne change!
Partager