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