> Tous les forumsAutres langages

 probleme avec des tableChanged en java
Statut du sujet : NON RESOLU Imprimer
 fourbiche
  Posté le 22/08/2005 @ 15:23  
 Petit astucien

4 Messages
Bonjour a tous ! voila je suis en trein d'essayer de realiser une petite application en java dans laquelle je me sert de TableModel. j'ai ajouter un listener sur ce TableModel, mais la partie de code qui est sensée s'executer au changement de valeur, c'est a dire la methode public void tableChanged(TableModelEvent e){} s'execute plusieur fois, je n'arrive pas a executer seulement une fois le code !!! package encaissement; import java.util.Locale; import java.text.DateFormat; import java.awt.GridLayout ; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Vector; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SpringLayout; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import parametrage.ParamCaisse; import parametrage.ParamCatProd; import produits.Produit; public class FenEncaiss extends JInternalFrame implements ActionListener, TableModelListener, KeyListener { private Container pane ; private String[] TabPays = {"France","Allemagne","Angleterre","Autriche","Belgique","Bulgarie","Cicile","Espagne","Grece","Hollande","Irland","Italie","Portugal","Suisse","Etats-Unis"} ; private String[] TabModes = {"CB", "CHEQUE", "ESPECE", "Abonnement"} ; private JTextField Jtcp, Jtclient, Jtadr, Jtville, Jtmodes ; private JLabel La1, La2, La3, La4, La5, La6, La7, La8, La9, La10, La11, La12, La13, La14, La15, La16, La17 ; private JTable TableauProduits ; private int test = 0 , cptbillet = 0; private JButton Jb1, Jb2, Jb3, Jbtest ; private JComboBox ListePays ; private JComboBox ListeModes ; //private String[][] tabbillet ; //private Object[] tabinfos ; private Vector tabinfos = new Vector() ; public FenEncaiss(String titre) { super(titre,true,true,true,true) ; //--------------------------------------------------------------------------// setSize(800,600); setLocation(0,0); setAutoscrolls(true) ; pane = new Container() ; SpringLayout layout = new SpringLayout(); pane.setLayout(layout); La1 = new JLabel("PAYS") ; La2 = new JLabel("Code postal") ; La3 = new JLabel("Client : ") ; La4 = new JLabel("Adresse : ") ; La5 = new JLabel("Ville : ") ; ParamCaisse param = new ParamCaisse() ; String numCaisse = param.recup() ; La6 = new JLabel("CAISSE N°" + numCaisse) ; ListePays = new JComboBox(TabPays) ; Jtcp = new JTextField("",5) ; Jtclient = new JTextField(" VISITEUR ",20) ; Jtadr = new JTextField("",20) ; Jtville = new JTextField("",20) ; //--------------------------------------------------------------------------// //--------------------------------------------------------------------------// pane.add(La1) ; pane.add(La2) ; pane.add(ListePays) ; pane.add(Jtclient) ; pane.add(La3) ; pane.add(Jtcp) ; pane.add(La4) ; pane.add(Jtadr) ; pane.add(La5) ; pane.add(Jtville) ; //--------------------------------------------------------------------------// layout.putConstraint(SpringLayout.WEST, La1,50,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La1,60,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La2,120,SpringLayout.EAST, La1); layout.putConstraint(SpringLayout.NORTH, La2,60,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, ListePays,50,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, ListePays,15,SpringLayout.SOUTH, La1); layout.putConstraint(SpringLayout.WEST, Jtcp,0,SpringLayout.WEST, La2); layout.putConstraint(SpringLayout.NORTH, Jtcp,15,SpringLayout.SOUTH, La2); layout.putConstraint(SpringLayout.WEST, La3,50,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La3,15,SpringLayout.SOUTH, ListePays); layout.putConstraint(SpringLayout.WEST, Jtclient,120,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jtclient,15,SpringLayout.SOUTH, ListePays); layout.putConstraint(SpringLayout.WEST, La4,50,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La4,15,SpringLayout.SOUTH, La3); layout.putConstraint(SpringLayout.WEST, Jtadr,120,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jtadr,15,SpringLayout.SOUTH, Jtclient); layout.putConstraint(SpringLayout.WEST, La5,50,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La5,15,SpringLayout.SOUTH, La4); layout.putConstraint(SpringLayout.WEST, Jtville,120,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jtville,15,SpringLayout.SOUTH, Jtadr); //--------------------------------------------------------------------------// // FIN PARTIE CLIENT DEBUT PARTIE PRODUITS //--------------------------------------------------------------------------// Jb1 = new JButton("VALIDATION") ; Jb2 = new JButton("IMPRESSION") ; Jb3 = new JButton("ANNULATION") ; Jbtest = new JButton("test") ; pane.add(Jb1) ; pane.add(Jb2) ; pane.add(Jb3) ; pane.add(Jbtest); Jb1.addActionListener(this); Jb2.addActionListener(this); Jb3.addActionListener(this); Jbtest.addActionListener(this); layout.putConstraint(SpringLayout.WEST, Jb1,20,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jb1,50,SpringLayout.NORTH, Jtville); layout.putConstraint(SpringLayout.WEST, Jb2,20,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jb2,50,SpringLayout.NORTH, Jb1); layout.putConstraint(SpringLayout.WEST, Jb3,20,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jb3,50,SpringLayout.NORTH, Jb2); layout.putConstraint(SpringLayout.WEST, Jbtest,20,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jbtest,50,SpringLayout.NORTH, Jb3); //--------------------------------------------------------------------------// // FIN PARTIE PRODUIT DEBUT PARTIE INFOS //--------------------------------------------------------------------------// Date d = new Date() ; Locale locale = Locale.getDefault(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale); La7 = new JLabel(dateFormat.format(d)) ; La8 = new JLabel("MONTANT TOTAL :") ; La9 = new JLabel("0") ; La10 = new JLabel("€") ; pane.add(La7) ; pane.add(La8) ; pane.add(La9) ; pane.add(La10) ; pane.add(La6) ; layout.putConstraint(SpringLayout.WEST, La7,450,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La7,70,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La8,450,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La8,90,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La9,5,SpringLayout.EAST, La8); layout.putConstraint(SpringLayout.NORTH, La9,90,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La10,5,SpringLayout.EAST, La9); layout.putConstraint(SpringLayout.NORTH, La10,90,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La6,450,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La6,50,SpringLayout.NORTH, pane); //--------------------------------------------------------------------------// // FIN PARTIE INFO DEBUT PARTIE PAIEMENT //--------------------------------------------------------------------------// La11 = new JLabel("Mode de paiement") ; La12 = new JLabel("Type") ; La13 = new JLabel("Montant") ; La14 = new JLabel("Nombre de billets") ; La15 = new JLabel("0") ; La16 = new JLabel("Rendu Monaie") ; La17 = new JLabel("0") ; ListeModes = new JComboBox(TabModes) ; Jtmodes = new JTextField("",5) ; pane.add(La11) ; pane.add(La12) ; pane.add(La13) ; pane.add(ListeModes) ; pane.add(Jtmodes) ; pane.add(La14) ; pane.add(La15) ; pane.add(La16) ; pane.add(La17) ; layout.putConstraint(SpringLayout.WEST, La11,550,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La11,210,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La12,550,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La12,240,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La13,670,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La13,240,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, ListeModes,550,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, ListeModes,260,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, Jtmodes,670,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, Jtmodes,260,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La14,550,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La14,300,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La15,670,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La15,300,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La16,550,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La16,330,SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, La17,670,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, La17,330,SpringLayout.NORTH, pane); Jtmodes.addKeyListener(this) ; ParamCatProd param2 = new ParamCatProd() ; Vector vect = param2.recupCat() ; Iterator it = vect.iterator() ; int cpt2 = 0 ; while(it.hasNext()) //pour chaque catégorie d'entrée { cpt2++; String cat = (String)it.next() ; String[] NomColones = {cat,"Prix","Quantité","Sous Total"}; ParamCatProd param3 = new ParamCatProd() ; Vector vectSousCat = param3.recupProd(cat); Iterator it2 = vectSousCat.iterator() ; Object[][] donne = new Object[vectSousCat.size()][] ; int cpt = 0 ; while(it2.hasNext()) { Produit prod = (Produit)it2.next() ; Object[] tab = {prod.getNom(),prod.getPrix()+"€","",""} ; donne[cpt] = tab ; cpt++; } CustomEditableCellTableModel model = new CustomEditableCellTableModel (donne, NomColones); TableauProduits = new JTable(model); int nbligne = model.getRowCount(); for(int i = 0 ; i<= nbligne ; i++) { model.addNotEditableCell (i, 0); model.addNotEditableCell (i, 1); model.addNotEditableCell (i, 3); } TableColumn colone2 = TableauProduits.getColumnModel().getColumn(2); JComboBox comboBox = new JComboBox(); comboBox.addItem("0") ; comboBox.addItem("1") ; comboBox.addItem("2") ; comboBox.addItem("3") ; comboBox.addItem("4") ; comboBox.addItem("5") ; comboBox.addItem("6") ; colone2.setCellEditor(new DefaultCellEditor(comboBox)); TableColumn column = null; for (int i = 0; i < 4; i++) { column = TableauProduits.getColumnModel().getColumn(i); if (i != 0) { column.setPreferredWidth(25); } } JScrollPane scrollPane = new JScrollPane(TableauProduits); scrollPane.setPreferredSize(new Dimension(350,100)); if(cpt>0) { pane.add(scrollPane) ; TableauProduits.getModel().addTableModelListener(this); } } //--------------------------------------------------------------------------// // couleur de fond de la fenêtre //--------------------------------------------------------------------------// pane.setBackground(new Color (200,200,230)); int cpt3 = 0 ; for(int cpt = 0 ; cpt < pane.getComponentCount() ; cpt++) { if(cpt>27) { layout.putConstraint(SpringLayout.WEST, pane.getComponent(cpt),150,SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.NORTH, pane.getComponent(cpt),250+(cpt3*100),SpringLayout.NORTH, pane); cpt3++; } } getContentPane().setLayout(new GridLayout(1,1)); getContentPane().add(pane) ; //--------------------------------------------------------------------------// setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setVisible(true) ; } public void keyPressed(KeyEvent evt){ } public void keyReleased(KeyEvent evt){ if(!La9.getText().equals("0")){ try{ Float f = new Float(Jtmodes.getText()) ; float fl = f.floatValue() ; String tmp = La9.getText() ; Float l = new Float(tmp) ; float lf = l.floatValue() ; rendumonaie(lf,fl) ; } catch(NumberFormatException e) { } } } public void rendumonaie(float tot, float don) { if(don>tot) La17.setText("" + (don-tot)) ; else La17.setText("0") ; } public void keyTyped(KeyEvent evt) { } public void actionPerformed(ActionEvent evt) { if (evt.getSource() instanceof JButton) { String ChoixOption = evt.getActionCommand(); if (ChoixOption.equals("VALIDATION")) { ParamCaisse param = new ParamCaisse() ; String numCaisse = param.recup() ; try { Date d = new Date() ; Locale locale = Locale.getDefault(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale); LogEncaisse log = new LogEncaisse() ; log.ecrire(TabPays[ListePays.getSelectedIndex()],Jtcp.getText(),Jtclient.getText(),Jtadr.getText(),Jtville.getText(),numCaisse,dateFormat.format(d),La9.getText(),La15.getText(),TabModes[ListeModes.getSelectedIndex()],Jtmodes.getText(),La17.getText()) ; log.enregistreFichier() ; } catch (Exception e) { e.printStackTrace(); } } else if(ChoixOption.equals("ANNULATION")) { /*Jtcp.setText("") ; Jtclient.setText(" VISITEUR") ; Jtadr.setText("") ; Jtville.setText("") ; ListePays.setSelectedIndex(0) ; La9.setText("0") ; La15.setText("0") ; La17.setText("0") ; ListeModes.setSelectedIndex(0) ; Jtmodes.setText("") ;*/ setVisible(false) ; } else if(ChoixOption.equals("test")) { System.out.println(tabinfos); } } } public void tableChanged(TableModelEvent e) { if (e.getType() != TableModelEvent.UPDATE) return; else{ int ligne = e.getFirstRow() ; try { System.out.println("bonjour") ; TableModel model = (TableModel)e.getSource() ; if(model.getRowCount()>0){ Object a = model.getValueAt(ligne,3) ; float ancien = 0 ; if(!a.equals("")){ Float anc = (Float)model.getValueAt(ligne,3) ; ancien = anc.floatValue() ;} float prix ; float nb ; String tmp = (String)model.getValueAt(ligne,1) ; String p = tmp.substring(0,tmp.length()-1) ; prix = new Float(p).floatValue(); nb = new Integer((String)model.getValueAt(ligne,2)).intValue() ; model.setValueAt(new Float(prix*nb),ligne,3) ; if(ancien<(prix*nb)) { Float la = new Float(La9.getText()) ; float la9 = la.floatValue() ; la9+= ((prix*nb)-ancien); String temp = "" + la9 ; La9.setText(temp) ; float ancienratio = ancien/prix ; cptbillet+=(nb-ancienratio) ; temp = "" + cptbillet ; La15.setText(temp) ; //---------------------------------------------------------------------- String nomcat = model.getColumnName(0) ; String nomsouscat = (String)model.getValueAt(ligne,0) ; //Object[] tab = {nomcat,nomsouscat,new Float(prix),new Float(nb)} ; //System.out.println(tab) ; //tabinfos.add(tab) ; tabinfos.add(nomcat+nomsouscat+new Float(prix)+":"+new Float(nb)) ; //System.out.println(nomcat+nomsouscat+new Float(prix)+":"+new Float(nb)) ; //---------------------------------------------------------------------- } else { Float la = new Float(La9.getText()) ; float la9 = la.floatValue() ; la9-=(ancien-(prix*nb)); String temp = "" + la9 ; La9.setText(temp) ; float ancienratio = ancien/prix ; cptbillet-=(ancienratio-nb) ; temp = "" + cptbillet ; La15.setText(temp) ; //---------------------------------------------------------------------- String nomcat = model.getColumnName(0) ; String nomsouscat = (String)model.getValueAt(ligne,0) ; //Object[] tab = {nomcat,nomsouscat,new Float(prix),new Float(nb)} ; //System.out.println(tab) ; tabinfos.add(nomcat+nomsouscat+new Float(prix)+":"+new Float(nb)) ; //System.out.println(nomcat+nomsouscat+new Float(prix)+":"+new Float(nb)) ; //---------------------------------------------------------------------- } } } catch(StackOverflowError ev) { } if(!La9.getText().equals("0")){ try{ Float f = new Float(Jtmodes.getText()) ; float fl = f.floatValue() ; String tmp = La9.getText() ; Float l = new Float(tmp) ; float lf = l.floatValue() ; rendumonaie(lf,fl) ; } catch(NumberFormatException ex) { } } } } } class CustomEditableCellTableModel extends DefaultTableModel { private ArrayList listCellNotEditable; public CustomEditableCellTableModel () { Super (); this.listCellNotEditable = new ArrayList (); } public CustomEditableCellTableModel (int numRows, int numColumns) { Super (numRows, numColumns); this.listCellNotEditable = new ArrayList (); } public CustomEditableCellTableModel (Vector columnNames, int numRows) { Super (columnNames, numRows); this.listCellNotEditable = new ArrayList (); } public CustomEditableCellTableModel (Object[] columnNames, int numRows) { Super (columnNames, numRows); this.listCellNotEditable = new ArrayList (); } public CustomEditableCellTableModel (Vector data, Vector columnNames) { Super (data, columnNames); this.listCellNotEditable = new ArrayList (); } public CustomEditableCellTableModel (Object[][] data, Object[] columnNames) { Super (data, columnNames); this.listCellNotEditable = new ArrayList (); } public void addNotEditableCell (int row, int column) { if ( ! (column >= 0 && column < this.getColumnCount ()) ) { return; } if ( ! ((row >= 0) && (row < this.getRowCount ())) ) { return; } this.listCellNotEditable.add (new Point (row, column)); } public void removeNotEditableCell (int row, int column) { int index = this.listCellNotEditable.indexOf (new Point (row, column)); if ( index != -1 ) { this.listCellNotEditable.remove (index); } } // surcharge de la methode afin de renvoyer false a toutes les cellules // marque comme non editable public boolean isCellEditable (int row, int column) { int index = this.listCellNotEditable.indexOf (new Point (row, column)); if ( index == -1 ) { return ( true ); } else { return ( false ); } } } bon j'ai mis tout le code de cette page (ça fait peut etre bcp mais bon...) voila le pb est ds la methode public void tableChanged(TableModelEvent e) , tt le code est executé plusieurs fois.... pkoi ? merci a tous
 Afficher le profil de fourbicheEnvoyer un message privé à fourbiche
 
 
Publicité
 breizhbugs  Posté le 22/08/2005 à 17:17  
Astucien

3001 Messages
Salut, C'est koi un TableModel? Bon j'ai pas lu le code mais voila: En supposant que ca ressemble a une zone d'edition, si tu rentres le mot "bonjour" au clavier, il y a 7 evenements, c'est a dire a chaque fois que tu rajoutes une lettre. donc le code est executer 7 fois. Donc le mieux pour savoir ce qui a change c'est que tu mette plein de println decrivant l'etat de ton truc, comme ca entre 2 execution tu compare et tu vois a quels evenement ca a reagi.
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 fourbiche  Posté le 23/08/2005 à 09:18  
Petit astucien

4 Messages
yes merci, mais en fait je crois savoir d'ou vient le pb... un TableModel c'est ce qu'on utilise pour créer des tableau en java... En fait c'est quand j'utilise la methode SetValueAt(Object,int,int) sur le model pour changer la valeur d'une des case qu'il y a un soucis. En effet cela provoque une exception de type stackoverflow.... [bombe] je n'arrive toujours pas a changer une des valeurs sans avoir ce pb... j'ai bien essayé en faisant un try{....} catch(stackoverflow){....} mais c a ce moment la que le code est effectué plusieurs fois.... [boom] aidez moi please.....[rougir]
Afficher le profil de fourbicheEnvoyer un message privé à fourbiche
 Revenir en haut de la page
 breizhbugs  Posté le 23/08/2005 à 11:47  
Astucien

3001 Messages
Salut, Bon je fais plus de java depuis longtemps et je ne connais donc pas les fonction dont tu parles, toutefois j'ai remarquer ca: ... int ligne = e.getFirstRow() ; ... "Row" veut dire colonne, n'aurait tu pas confondu? Et donc tu accedes a une ligne qui n'existe pas donc stackoverflow?
Afficher le profil de breizhbugs Voir la configuration de breizhbugsEnvoyer un message privé à breizhbugs
 Revenir en haut de la page
 fourbiche  Posté le 23/08/2005 à 17:14  
Petit astucien

4 Messages
ben est tu vraiment sur que row veut dire ligne.... j'ai un vieux doute moi...[rougir] pouhh non mais la vraiment ça me saoul un peu les erreurs comme ça... mon code devient de plus en plus bordelique... ahahahahaaaa .... restons zen [chinois]
Afficher le profil de fourbicheEnvoyer un message privé à fourbiche
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page