AJout de ligne dans un tableau en fonction de la saisie

Résolu
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008 - 13 mai 2008 à 22:12
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008 - 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.
A voir également:

7 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
14 mai 2008 à 09:45
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"});
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
15 mai 2008 à 21:06
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.
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
15 mai 2008 à 21:09
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;
       }
    }
});
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 mai 2008 à 20:14
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();
         }
    }
});
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
15 mai 2008 à 14:59
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.^^^^
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
20 mai 2008 à 11:55
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.
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
21 mai 2008 à 10:27
Merci Ombotious sa fonctionne^^

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

++
0
Rejoignez-nous