AJout de ligne dans un tableau en fonction de la saisie [Résolu]

Beberto56 119 Messages postés mardi 8 avril 2008Date d'inscription 22 décembre 2008 Dernière intervention - 13 mai 2008 à 22:12 - Dernière réponse : Beberto56 119 Messages postés mardi 8 avril 2008Date d'inscription 22 décembre 2008 Dernière intervention
- 21 mai 2008 à 10:27
Bonjour,

je réalise un formulaire en java grâce à netbeans, et j'ai placé un tableau (jTable) en mode design sur ce formulaire.
Ce tableau est composé de sept colonnes avec les jours de la semaine et une ligne avec la semaine numero 1.
J'ai une zone de text ou on saisi le nombre de semaine désirée. Je voudrais que le nombre de ligne de mon tableau évolu en fonction du nombre de semaines saisie.
Si on saisie 3 dans nombre de semaine le tableau ajoute automatiquement deux lignes correspondant a deux nouvelles semaines.
Si quelqu'un peut me guider et me conseiller je lui en serait reconnaissant.

Merci d'avance.

Cordialement Julien.
Afficher la suite 

7 réponses

Répondre au sujet
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 14 mai 2008 à 09:45
+3
Utile
Salut:

Pour ajouter une ligne à un composant JTable, utilises une des variantes de la méthode addRow() de la classe DefaultTableModel.

[../../j2se6/api/javax/swing/table/DefaultTableModel.html#HTML_TO_HH_98328 javax.swing.table.DefaultTableModel.addRow(java.lang.Object[])]
[../../j2se6/api/javax/swing/table/DefaultTableModel.html#HTML_TO_HH_98327 javax.swing.table.DefaultTableModel.addRo(java.util.Vector)]

DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model);

// Ajouter une nouvelle ligne vide
model.add(new Object[] {});
ou bien
model.add(new Vector());

Comme tu utilises NetBeans, il faut personnaliser la création du composant JTable.

J'ai fait une petit exemple, j'ai vu que le générateur de code utilise déja un DefaultTableModel pour créer le composant de type JTable, donc il te suffira d'écrire tout simplement:

Par exemple tu peux ajouter ce code dans la méthode actionPerformed() d'un ActionListener:

DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(new Object[] {"data", "data", "data"});
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 15 mai 2008 à 21:06
+3
Utile
Salut:

"Je voudrais que lorsque l'on entre un nombre de semaine, il y est un nombre de ligne de tableau équivalent qui apparaissent."

// Tableau
final JTable table = ...;

// Le nombre de semaines est saisit dans ce champs
final JTextField inputField = ...;
inputField.setInputVerifier(new InputVerifier() {
    public boolean verify(JComponent comp) {
       JTextField field = (JTextField)comp;
       return field.getText().matches("[1-9]*");
    }
});

// Action
JButton submit = new JButton("Submit");
submit.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
          String text = inputField.getText();
          if (text.equals("")) {
                text = "0";
          }
          int count = new Integer(text).intValue();
          DefaultTableModel model = (DefaultTableModel)table.getModel();
          for (int i = 0; i < count; ++i) {
                 model.addRow(new Object[] {"data", "data", "data", "data", "data", "data", "data"});
          }
    }
});

Note: si les variables table et inputField sont deux attributs de ta classe alors ce n'est pas nécessaire d'ajouter le modificateur final, si ce n'est pas le cas alors le modificateur final est nécessaire.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 15 mai 2008 à 21:09
+3
Utile
Salut:

Petite rectification

// Le nombre de semaines est saisit dans ce champs
final JTextField inputField = ...;
inputField.setInputVerifier(new InputVerifier() {
    public boolean verify(JComponent comp) {
       JTextField field = (JTextField)comp;
       try {
             Integer.parseInt(field.getText());
             return true;
       } catch (NumberFormatException e) {
             return false;
       }
    }
});
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 20 mai 2008 à 20:14
+3
Utile
Salut:

Tout dépend de la façon avec laquelle tu veux valider le nombre de lignes saisies par l'utilisateur.

Tu peux par exemple ajouter un bouton pour valider la saisie de l'utilisateur.

Ou bien tu peux ajouter un KeyListener au champs de saisie qui une fois on appuie sur entrée il exécute le code.

Comme tu peux combiner ces deux styles ce qui est encouragé.

Créer une méthode quelconque:

private void createRows() {
        String text = inputField.getText();
        if (text.equals("")) {
                text = "0";
        }
        int count = new Integer(text).intValue();
        DefaultTableModel model = (DefaultTableModel)table.getModel();
        for (int i = 0; i < count; ++i) {
              model.addRow(new Object[] {"data", "data", "data", "data", "data", "data", "data"});
        }
}

public class Main extends javax.swing.JFrame {

    // ...

    // Variables declaration - do not modify
    private javax.swing.JTextField field;
    private javax.swing.JButton submitButton;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable table;
    // End of variables declaration
}

1. Attacher un ActionListener au bouton de validation:

submitButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {  
        createRows();
    }
});

2. Attacher un KeyListener au champs de saisie:

field.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
         if (e.getKeyCode() == VK_ENTER) {
                createRows();
         }
    }
});
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Ombitious_Developper
Beberto56 119 Messages postés mardi 8 avril 2008Date d'inscription 22 décembre 2008 Dernière intervention - 15 mai 2008 à 14:59
0
Utile
Re,

je te remerci dans un premier temps pour l'attention que tu à porté à ma question. En fait si tu veux j'ai une zone de texte jTextField1 ou je peut saisir un nombre de semaine et j'ai placer un tableau avec plusieurs colonnes et une ligne de base qui correspond a une semaine obligatoire.
Je voudrais que lorsque l'on entre un nombre de semaine, il y est un nombre de ligne de tableau équivalent qui apparaissent. Si on entre un cycle de 3 semaines, mon tableau fait apparaître deux lignes supplémentaire.
Comme tu peut le constater je suis débutant en java et j'avous que cela me dépasse un peu. J'ai essayer ta solution mais je n'arrive pas à la lier à la saisi de la zone de texte.

Merci de ton aide.

A plus tard.

Julien.^^^^
Commenter la réponse de Beberto56
Beberto56 119 Messages postés mardi 8 avril 2008Date d'inscription 22 décembre 2008 Dernière intervention - 20 mai 2008 à 11:55
0
Utile
Re ombitious tout d'abord merci pour tes explications , mais le problème c'est que j'utilise le panel design de netbeans et donc je te met le code test que j'ai mis en place :

mon tableau s'appel table
mon champs de texte s'appel field

voila ou j'en suis cad au début je n'arrive pas a adapter ton code peux tu modifier le mien stp je me perd dans les noms et les codes (arf ces débutants^^)

package testevoltablo;
    public class Main extends javax.swing.JFrame {
        public Main()
        {
            initComponents();
        }

    (Generated code)

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

          //Zone d'action sur le bouton ajouter
         //ton bout de code numero1 
       /*String text = inputField.getText();
          if (text.equals(""))
          {
                text = "0";
          }
          int count = new Integer(text).intValue();
          DefaultTableModel model = (DefaultTableModel)table.getModel();
          for (int i = 0; i < count; ++i)
          {
                 model.addRow(new Object[] {"data", "data", "data", "data", "data", "data", "data"});
          }*/
       
    }
    private void fieldActionPerformed(java.awt.event.ActionEvent evt) {

        /*je ne sais pas ou placer tes bouts de codes*/
       
        //ton bout de code numero2
        /*field.setInputVerifier(new InputVerifier())
        {
            public boolean verify(JComponent comp)
            {
                field = (JTextField)comp;
                try
                {
                    Integer.parseInt(field.getText());
                    return true;
                 }
                catch (NumberFormatException e)
                {
                    return false;
                }
            }
        }*/
       
    }
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run()
            {
                new Main().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify
    private javax.swing.JTextField field;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable table;
    // End of variables declaration
   
}

Excuse moi si je te demande cela mais je ne vois pas le bout et je suis désespéré. En tous cas je te remercis.

++ Julien.
Commenter la réponse de Beberto56
Beberto56 119 Messages postés mardi 8 avril 2008Date d'inscription 22 décembre 2008 Dernière intervention - 21 mai 2008 à 10:27
0
Utile
Merci Ombotious sa fonctionne^^

ouf tu m'as enlever une belle épine du pied

++
Commenter la réponse de Beberto56

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.