Remplir jtable
laurent2403
Messages postés
96
Statut
Membre
-
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;
}
}
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
-
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(); } -
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. -
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... -
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