Renderer et JTable

new_object Messages postés 16 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 juin 2009 - 26 juin 2009 à 18:41
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 28 juin 2009 à 23:08
je n'arrive pas afficher correctement mes données dans le composant JTable.
j'ai créer 3 classes :
class MonModel extends AbstractTableModel {
.....
}
class MonApp extends JPanel{
MonModel model=new MonModel();
JTable table=new JTable(model);
......
}
class Produit {
String code;
String Designation;
int prixAchat;
int prixVente;
....
}

dans la class MonModel j'ai defini une méthode addProduit(Produit prod);
quand je fais l'ajout d'un Produit : model.addPorduit(new Produit("codeProduit","designationProduit",100$,150$));
le compostna table n'affiche pas des donnée correctement auportant ce sont des données du type String et int, donc normalement j'ai pas besoin de redifinier le Renderer pour les afficher correctement.
merci de me rependre

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 juin 2009 à 18:56
Salut,

"le compostna table n'affiche pas des donnée correctement" : c'est possible, mais tant que tu nous dit pas ce que tu veux voir afficher, et ce qu'il t'affiche réellement, ca va être dur de te venir en aide.
0
new_object Messages postés 16 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 juin 2009
26 juin 2009 à 19:10
voila :
ma class Produit :
class Procuit{
  String code;
  String designation;
  int prixAchat;
  int prixVente;
public Procuit(String code, String design, int achat, int vente){
  this.code=code;
  this.designation=designe;
  this.prixAchat=achat;
  this.prixVente=vente;
}
// les seter et geter
}

et dans mon composant table, j'ai 4 colonnes :
| Code Produit | Designation | Prix Achat | Prix Vente |

normalement quand j'ajout a nouveau produit je vais aboir un truc du ce genr :

| Code Produit | Designation | Prix Achat | Prix Vente |
-------------------------------------------------------
code1               designation1   achat1             vente1
code2               designation2   achat2             vente2
code3               designation3   achat3             vente3

mais moi, il m'affiche :
| Code Produit | Designation | Prix Achat | Prix Vente |

-------------------------------------------------------
@12352              @123521  @2154584   @951245
@12514              @145213   @5178451   @514278

en tout cas un truc genr, alors je croi ya un raport avec le renderer, non??

j'espere que je suis clair là
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 juin 2009 à 19:33
Ok, par contre, il nous manque le code qui te permet d'ajouter ta ligne dans le JTable pour voir ce qui cloche. (Nottament le code de "MonModel")
0
new_object Messages postés 16 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 juin 2009
27 juin 2009 à 20:41
re, voici mon code :
/*--------- Ma class Produit ------------*/
public class Produit{
String code;
String design;
int achat;
int vente;
int qtte;
public Produit(String cod, String desi, int a, int v, int q){
this.code=cod;
this.design=desi;
this.achat=a;
this.vente=v;
this.qtte=q;
}
public Produit(Object[]info){
this.code=info[0].toString();
this.design=info[1].toString();
this.achat=(Integer)info[2];
this.vente=(Integer)info[3];
this.qtte=(Integer)info[4];
}
public int getAchat() {
return achat;
}
public void setAchat(int achat) {
this.achat = achat;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesign() {
return design;
}
public void setDesign(String design) {
this.design = design;
}
public int getQtte() {
return qtte;
}
public void setQtte(int qtte) {
this.qtte = qtte;
}
public int getVente() {
return vente;
}
public void setVente(int vente) {
this.vente = vente;
}

}

/*--------- Mon model de table -------------*/
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class ModelMJN extends AbstractTableModel{
Vectordatas=new Vector();
String[] colNames=new String[]{"Code Produit","Designation","Prix Achat","Prix Vente","Quantite"};

public void addProduit(Produit prod) {
datas.add(prod);
fireTableDataChanged();
}
public void suppProduit(int index){
datas.remove(index);
fireTableDataChanged();
}

public int getRowCount() {
return datas.size();
}

public int getColumnCount() {
return 5;
}

public Produit getValueAt(int row, int column) {
return datas.get(row);
}
public boolean isCellEditable(int row,int column){
return false;
}
public String getColumnName(int index) {
return colNames[index];
}

}

/*--------- Ma calss principale ------------*/
import javax.swing.*;
import javax.swing.table.*;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Test extends JFrame implements ActionListener{
int objectOnUpdate;
JPanel pane=new JPanel(new BorderLayout());
JPanel pText=new JPanel(new GridLayout(1,5,2,2));
JPanel pBoutton=new JPanel();
JTable table;
ModelMJN model=new ModelMJN();
JButton ajouter=new JButton("Ajouter");
JButton supprimer=new JButton("Supprimer");
JButton modifier=new JButton("Modifier");
JTextField[] t=new JTextField[5];
public Test(){
for(int i=0;i<5;i++){
t[i]=new JTextField(5);
pText.add(t[i]);
}
table=new JTable(model);
pane.add(new JScrollPane(table),BorderLayout.CENTER);
pBoutton.add(ajouter);
pBoutton.add(supprimer);
pBoutton.add(modifier);
pane.add(pBoutton,BorderLayout.SOUTH);
pane.add(pText,BorderLayout.NORTH);
this.ajouter.addActionListener(this);
this.supprimer.addActionListener(this);
this.modifier.addActionListener(this);
this.setSize(500,500);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setContentPane(pane);
this.setVisible(true);

}
public void viderChamps(){
for(int i=0;i<5;i++)
this.t[i].setText("");
}
public void remplirChamps(Produit prod){
this.t[0].setText(prod.getCode());
this.t[1].setText(prod.getDesign());
this.t[2].setText(""+prod.getAchat());
this.t[3].setText(""+prod.getVente());
this.t[4].setText(""+prod.getQtte());
}
public Produit getProduit(){
String code=t[0].getText();
String design=t[1].getText();
int achat=Integer.parseInt(t[2].getText());
int vente=Integer.parseInt(t[3].getText());
int qtte=Integer.parseInt(t[4].getText());
return new Produit(code,design,achat,vente,qtte);
}
public void actionPerformed(ActionEvent e){
Object source=e.getSource();
if(source==ajouter){
if(ajouter.getText().equalsIgnoreCase("Ajouter"))
model.addProduit(this.getProduit());
else{
model.suppProduit(objectOnUpdate);
model.addProduit(this.getProduit());
}
this.viderChamps();
}
else if(source==supprimer){
model.suppProduit(table.getSelectedRow());
}else if(source==modifier){
this.objectOnUpdate=table.getSelectedRow();
this.ajouter.setText("Valider");
this.remplirChamps(model.getValueAt(objectOnUpdate,0));
this.ajouter.setText("Ajouter");
}

}

public static void main(String[]arg){
new Test();
}
}



Normalement c'est un code qui marche, mais ya un probleme dans l'affichage des donnée dans la table, merci de me repenre
0

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

Posez votre question
new_object Messages postés 16 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 juin 2009
27 juin 2009 à 20:46
c'est du copier/coller que j'ai fais, et dans les fichiers source c'etai plus organisé, je sais pas si ya un moyen pour garder la mis en page
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 juin 2009 à 21:45
Essaye de copier coller ton code avec le textbox classique, et non cette fichue freetextbox qui marche très mal !
0
new_object Messages postés 16 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 28 juin 2009
28 juin 2009 à 15:52
/*-------------------- Class princible ------------------------------*/
import javax.swing.*;
import javax.swing.table.*;


import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class Test extends JFrame implements ActionListener{
 int objectOnUpdate;
 JPanel pane=new JPanel(new BorderLayout());
 JPanel pText=new JPanel(new GridLayout(1,5,2,2));
 JPanel pBoutton=new JPanel();
 JTable table;
 ModelMJN model=new ModelMJN();
 JButton ajouter=new JButton("Ajouter");
 JButton supprimer=new JButton("Supprimer");
 JButton modifier=new JButton("Modifier");
 JTextField[] t=new JTextField[5];
 public Test(){
  for(int i=0;i<5;i++){
   t[i]=new JTextField(5);
   pText.add(t[i]);
  }
  table=new JTable(model);
  pane.add(new JScrollPane(table),BorderLayout.CENTER);
  pBoutton.add(ajouter);
  pBoutton.add(supprimer);
  pBoutton.add(modifier);
  pane.add(pBoutton,BorderLayout.SOUTH);
  pane.add(pText,BorderLayout.NORTH);
  this.ajouter.addActionListener(this);
  this.supprimer.addActionListener(this);
  this.modifier.addActionListener(this);
  this.setSize(500,500);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  this.setContentPane(pane);
  this.setVisible(true);
  
 }
 public void viderChamps(){
  for(int i=0;i<5;i++)
   this.t[i].setText("");
 }
 public void remplirChamps(Produit prod){
  this.t[0].setText(prod.getCode());
  this.t[1].setText(prod.getDesign());
  this.t[2].setText(""+prod.getAchat());
  this.t[3].setText(""+prod.getVente());
  this.t[4].setText(""+prod.getQtte());
 }
 public Produit getProduit(){
  String code=t[0].getText();
  String design=t[1].getText();
  int achat=Integer.parseInt(t[2].getText());
  int vente=Integer.parseInt(t[3].getText());
  int qtte=Integer.parseInt(t[4].getText());
  return new Produit(code,design,achat,vente,qtte);
 }
 public void actionPerformed(ActionEvent e){
  Object source=e.getSource();
  if(source==ajouter){
   if(ajouter.getText().equalsIgnoreCase("Ajouter"))
    model.addProduit(this.getProduit());
   else{
    model.suppProduit(objectOnUpdate);
    model.addProduit(this.getProduit());
   }
   this.viderChamps();
  } 
  else if(source==supprimer){
   model.suppProduit(table.getSelectedRow());
  }else if(source==modifier){
   this.objectOnUpdate=table.getSelectedRow();
   this.ajouter.setText("Valider");
   this.remplirChamps(model.getValueAt(objectOnUpdate,0));
   this.ajouter.setText("Ajouter");
  }
   
 }
 
 public static void main(String[]arg){
  new Test();
 }
}








/*------------------- Class Produit ------------------------*/
public class Produit{
 String code;
 String design;
 int achat;
 int vente;
 int qtte;
 public Produit(String cod, String desi, int a, int v, int q){
  this.code=cod;
  this.design=desi;
  this.achat=a;
  this.vente=v;
  this.qtte=q;
 }
 public Produit(Object[]info){
  this.code=info[0].toString();
  this.design=info[1].toString();
  this.achat=(Integer)info[2];
  this.vente=(Integer)info[3];
  this.qtte=(Integer)info[4];
 }
 public int getAchat() {
  return achat;
 }
 public void setAchat(int achat) {
  this.achat = achat;
 }
 public String getCode() {
  return code;
 }
 public void setCode(String code) {
  this.code = code;
 }
 public String getDesign() {
  return design;
 }
 public void setDesign(String design) {
  this.design = design;
 }
 public int getQtte() {
  return qtte;
 }
 public void setQtte(int qtte) {
  this.qtte = qtte;
 }
 public int getVente() {
  return vente;
 }
 public void setVente(int vente) {
  this.vente = vente;
 }
 
}
/*------------------- Class model --------------------*/

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


class ModelMJN extends AbstractTableModel{
 Vectordatas=new Vector();
 String[] colNames=new String[]{"Code Produit","Designation","Prix Achat","Prix Vente","Quantite"};
 
 public void addProduit(Produit prod) {
  datas.add(prod);
     fireTableDataChanged();
  }
 public void suppProduit(int index){
  datas.remove(index);
  fireTableDataChanged();
 }
 
 public int getRowCount() {
     return datas.size();
   }


   public int getColumnCount() {
     return 5;
   }


   public Produit getValueAt(int row, int column) {
     return datas.get(row);
   }
   public boolean isCellEditable(int row,int column){
    return false;
   }
   public String getColumnName(int index) {
          return colNames[index];
     }
 
}

/*------------------- Class principal-------------*/
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 juin 2009 à 23:08
A première vue, je dirais que ton problème vient de là :
public Produit getValueAt(int row, int column) {
return datas.get(row);
}

Tu ne tiens pas compte de l'index de la colonne !

Essaye avec ceci :
public Produit getValueAt(int row, int column) {
if (column == 0) {
return datas.get(row).getCode();
}
// etc.
}
0
Rejoignez-nous