Remplir jtable

laurent2403 Messages postés 96 Statut Membre -  
laurent2403 Messages postés 96 Statut Membre -
Bonjour,
j'aurais besoin s'il vous plait que quelqu'un regarde et aussi pouvait corriger mon code car je ne comprend pas pourquoi je n'arrive pas a remplir ma jtable du contenu de mon fichier constitue de (désignation,PU) voici mon code ,et merci beaucoup pour toute l'aide que vous m'apportez...

package methodologie_projet;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JTable;
import javax.swing.JScrollPane;

public class RemplirJTable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JButton btnremplir;

// attributs non_graphique
private String[] entetes = { "designations", "PU" };
private Object[][] donnees = new Object[100][2];
private JTable table;
private JScrollPane scrollPane_1;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RemplirJTable frame = new RemplirJTable();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public RemplirJTable() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 799, 449);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getBtnremplir());
contentPane.add(getScrollPane_1());
}

private JButton getBtnremplir() {
if (btnremplir == null) {
btnremplir = new JButton("remplir");
btnremplir.setBounds(335, 343, 97, 25);
btnremplir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
remplir();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
});

}
return btnremplir;
}

private void remplir() throws IOException {//methode
// ouverture d'un stream
FileReader fr = new FileReader("sauve_login.txt");
BufferedReader br = new BufferedReader(fr);
String designation;
String PU;
int row = 0;

String ligne = br.readLine();
while (ligne != null) {
String[] tabChaine = ligne.split(";");// decoup de chaque ligne
designation = tabChaine[0];
PU = tabChaine[1];
// code propre au jtable
table.setValueAt(designation, row, 0);
table.setValueAt(PU, row, 1);
// ne pas oublier pour suivre la lecture du fichier
ligne = br.readLine();
row++;
}

}

private JTable getTable() {
if (table == null) {
table = new JTable(donnees, entetes);

}
return table;
}

private JScrollPane getScrollPane_1() {
if (scrollPane_1 == null) {
scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(140, 23, 441, 209);
scrollPane_1.setViewportView(getTable());
}
return scrollPane_1;
}
}

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Je viens d'essayer ton code et ça fonctionne (cf. screenshot.png)... Où est le problème ?

    Remarque : il y a plus élégant que de créer un tableau très grand initialement vide et de changer les cases. On peut utiliser un Model pour ajouter des lignes au fur et à mesure.

    private DefaultTableModel model;
    
    private JTable getTable()
    { 
        if (table==null)
        {
            model = new DefaultTableModel();
            model.setColumnIdentifiers(entetes);
            table = new JTable(model);
        }
        
        return table;
    }
    
    private void remplir() throws IOException
    {
        Scanner sc = new Scanner(new File("sauve_login.txt"));
    	
        while (sc.hasNextLine())
            model.addRow(sc.nextLine().split(";"));
    	
        sc.close();
    }
    2
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Est-ce que l'on parle bien du même code ? Parce que là il t'indique une erreur dans la méthode remplir() à la ligne 114, alors que moi cette méthode va des lignes 74 à 95.

    Cependant vu le message d'erreur dont il s'agit, je pencherais pour un problème ici :
    PU = tabChaine[1];
    En effet, si tu n'as pas de point-virgule sur une ligne, le split(";") renverra un tableau tabChaine avec une seule case, et il y aura une erreur d'accès quand on essaye de lire la seconde case.

    Dans ce cas il s'agit surtout d'une erreur dans le fichier, puisque l'on suppose a priori qu'il contient sur chaque ligne quelque chose de la forme "designation;PU"

    Tu peux alors changer ton code comme ceci :

    String[] tabChaine = ligne.split(";");// decoup de chaque ligne
    if (tabChaine!=null && tabChaine.length==2)
    {
        designation = tabChaine[0];
        PU = tabChaine[1];
        // code propre au jtable
        table.setValueAt(designation, row, 0);
        table.setValueAt(PU, row, 1);
    }
    else
        System.err.printf("Ligne %d invalide :\n\t%s\n",row,ligne);

    Remarque : si tu utilises mon code, tu n'auras pas ce problème là, mais par contre tu auras une case vide pour chaque champ manquant.
    2
  3. laurent2403 Messages postés 96 Statut Membre 2
     
    bonjour KX je comprend pas ,ma jframe s'affiche mais quand je clique sur remplir ce qu'il me met:

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
    at methodologie_projet.RemplirJTable.remplir(RemplirJTable.java:114)
    at methodologie_projet.RemplirJTable.access$0(RemplirJTable.java:99)
    at methodologie_projet.RemplirJTable$2.actionPerformed(RemplirJTable.java:88)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    merci pour ton aide...
    1
  4. laurent2403 Messages postés 96 Statut Membre 2
     
    salut KX
    je viens de m'apercevoir de ma boulette,j'ai pas de ";" entre mes objets dans mon fichier txt ...
    ça risque pas de tourner...
    merci pour ton aide
    1