Calculs dans un JTable

Bonjour à tous !!!
Je voudrais effectuer des calculs dans un JTable mais je ne sais pas comment faire. En fait, j'ai 4 colonnes: Désignation, Quantité (Q), Prix unitaire (PU) et Prix Total (PT). Je voudrais effectuer, selon la désignation, le calcul PT=Q*PU dans chacune des lignes où l'utilisateur entrera une Q et un PU et que la cellule du PT contienne le résultat.
Je voudrais aussi que lorsque l'utilisateur entre le mot clé "total", la cellule correspondant au PT affiche la somme de tous les PT calculés auparavant.

Merci de m'aider à résoudre ce problème !!!

1 réponse

  1. Modérateur
    Bonjour,

    Si je comprends bien, tu veux te faire une mini feuille Excel comme ça :

    Je ne pense pas que "l'utilisateur entre le mot clé "total"" soit une bonne idée, il vaudrait mieux avoir une dernière ligne TOTAL toujours affichée mais que l'on décale au fur et à mesure que les lignes du dessus se remplissent. Ou plus simple : on calcule le total en dehors de la JTable.

    Dans le tutoriel officiel How to Use Tables, ce qui t'intéresse sera Listening for Data Changes et éventuellement Using an Editor to Validate User-Entered Text.
    1
    1. Exactement, le tableau excel illustre bien ce que je veux, vous avez compris mon problème. Je pense alors que ces liens là contiennent la solution. Je vous répond dans quelques temps !!!
      Merci beaucoup !!!
      0
    2. J'ai lu le tutoriel Listening for Data Changes mais je ne sais pas ce qu'ils veulent dire par "Do something with the data" c'est-à-dire faites quelques choses avec les données.
      0
    3. Modérateur
      @Coubi7Et bien dans ton cas, si tu changes une case quantité ou une case prix unitaire, ce que tu vas faire c'est recalculer la case prix total de la ligne correspondante.

      Exemple :

      int column = e.getColumn();
      int row = e.getFirstRow();
      
      if (column==1 || column==2) {
          TableModel model = (TableModel) e.getSource();
          int qty = (Integer) model.getValueAt(row, 1);
          double price = (Double) model.getValueAt(row, 2);
          model.setValueAt(row, 3, qty * price);
      }

      Evidemment je suppose ici que les valeurs dans chaque case sont correctes, mais il faut le vérifier, en particulier avec Using an Editor to Validate User-Entered Text.
      0
    4. A quoi sert la méthode getFirstRow() ?
      0
    5. Modérateur
      @Coubi7Avec un JTable il est possible de changer plusieurs lignes d'un coup, les indices des lignes qui ont changées sont donc référencées dans l'événement par les méthodes getFirstRow() et getLastRow(), mais dans ton cas vu que tu ne changes qu'une case à la fois, ces deux méthodes renverront le même résultat : le numéro de la ligne sélectionnée.
      0