Bonjour,

Débutant en Java, je suis actuellement en train de mettre au point une mini appli dont une fonction caisse. J'utilise une JFrame associée à un CardLayout, chaque section ayant comme support un panel

L'idée est de scanner un code barre, qui va déclencher une requete pour récuperer l'id du produit, son titre et son prix.

Un clic, enverra cela dans une jtable "panier" qui elle même sera envoyé dans ma bd une fois la transaction completée.

Pour le moment je finalise la partie "produit" et la récupération des infos du produit scanné. Pour cela j'utilise un Keylistener/Keyreleased.

Il fonctionne, j'ai bien en utilisant ma douchette, les bonnes infos et au bon endroit. Toutefois je suis confronté à deux problèmes :

-En premier lieu, je dois mettre en place une condition pour n’exécuter la requête que si la variable nbreean contient 13 caractères (le nombre de caractères d'un EAN). Car la douche ne fait pas apparaitre 13 caractères d'un coup, elle ne fait qu'enchainer les caractères. Du coup j'ai un déclenchement de requete pour 1 chiffre, puis pour 2, pour 3 et ainsi de suite.

La récupération et le comptage fonctionne, mais je ne sais pas comment placer ma condition. Il y a beaucoup d'imbrication avec le listener et la requête, et je suis un peu perdu

-En deuxième lieu, je dois arriver à faire passer la valeur de la combobox de quantité, pour le multiplier au montant unitaire. Je ne sais pas comment appeler cette valeur de l'intérieur du listener.

Je n'ai pas mis la JFrame principale, ni le connecteur, je les met au besoin. Plus généralement, j'éspère que telle que les choses ont été imbriquées, le sont à peu près correctement.

Merci de votre aide

Mon Panel de Caisse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package com.pl.app;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
 
public class PanelCaisse extends JPanel{
	 private JLabel LEANREF, LTitre, LAuteur, LEditeur, LQte, LStock,LPuttc,LTottc, Ltva, LRemise, LTotal, LMpaiement,label,LTTicket,LTRecu,LTRendu,LMontant,LABELT;
	 private JComboBox mpaiement,qtp;
	 private JTextField JEANREF,JTitre,JAuteur,JEditeur,JQte, JStock,JPuttc,JTottc, Jtva, JPrix, JRemise,JTotal,JTTicket,JTRecu,JTRendu;
	 private JButton jButton1,jButton2;
	 private JTable tableaupan;
	 private double mont;
	 private int cqte;
	 private int nbreean;
	 private float prixut;
	 private float prixtotal;
	 private String eanr; 
 
	 public PanelCaisse(){
		    initComponent();
	}
 
	  private void initComponent(){
		  setBackground(Color.white);	  
		  //--Affichage de l'indicateur de montant
		  JPanel panmontant = new JPanel();
		  panmontant.setBackground(Color.white);
		  panmontant.setPreferredSize(new Dimension(380, 50));
		  DecimalFormat df = new DecimalFormat("0.00");
		  JLabel LMontant = new JLabel("En cours : " +df.format(mont));
		  panmontant.add(LMontant);
		  //--------------------
 
		  //--Affichage de la Jtable panier
		  JPanel panpanier = new JPanel();
		  panpanier.setBackground(Color.white);
		  panpanier.setPreferredSize(new Dimension(380, 150));
		  CaisseTableModel rtm = new CaisseTableModel();
		  tableaupan = new JTable(new CaisseTableModel());
		  tableaupan.setBackground(Color.white);
		  tableaupan.getColumnModel().getColumn(0).setMaxWidth(70); 
		  tableaupan.getColumnModel().getColumn(1).setMaxWidth(220); 
		  tableaupan.getColumnModel().getColumn(2).setMaxWidth(70); 
		  panpanier.setLayout(new BorderLayout());
		  panpanier.add(new JScrollPane(tableaupan), BorderLayout.CENTER);
		//--------------------
 
		  //--Affichage de la date et heure
		    JPanel pandatheure = new JPanel();
		    pandatheure.setBackground(Color.white);
		    pandatheure.setPreferredSize(new Dimension(180, 60));
		    pandatheure.setBorder(BorderFactory.createTitledBorder("Nous sommes le"));  
			String date = new SimpleDateFormat("E-dd-MMM-yyyy").format(new Date());
			label = new JLabel(date);
			pandatheure.add(label);
		//--------------------
 
		 //--Affichage des informations produits
		    JPanel paninfoprod = new JPanel();
		    paninfoprod.setBackground(Color.white);
		    paninfoprod.setPreferredSize(new Dimension(440,120));
		    paninfoprod.setBorder(BorderFactory.createTitledBorder("Cadre Produit"));
		    LEANREF = new JLabel("EAN");
		    LTitre = new JLabel("Titre :");
		    LQte = new JLabel("Qté");
		    LStock = new JLabel("Stock");
		    LPuttc = new JLabel("P.U TTC");
		    LTottc = new JLabel("Total TTC");
		    Ltva = new JLabel("TVA");
		    LRemise = new JLabel("Remise ?(%)");
		    JTitre = new JTextField();
		    JEANREF = new JTextField();
		    JRemise = new JTextField();
		    JComboBox qtp = new JComboBox();
		    for(int i=1; i<11; i++)
		    qtp.addItem(new Integer(i));	
		    qtp.setSelectedIndex(0);
 
		    JStock = new JTextField();
		    JStock.setEditable(false);
		    JPuttc = new JTextField();
		    JTottc = new JTextField();
		    Jtva = new JTextField();
		    Jtva.setEditable(false);
		    JEANREF.setPreferredSize(new Dimension(120, 25));
		    JTitre.setPreferredSize(new Dimension(220, 25));
		    JPuttc.setPreferredSize(new Dimension(35, 25));
		    JTottc.setPreferredSize(new Dimension(45, 25));
		    JStock.setPreferredSize(new Dimension(35, 25));
		    Jtva.setPreferredSize(new Dimension(35, 25));
		    JRemise.setPreferredSize(new Dimension(35, 25));
		    paninfoprod.add(LEANREF);
		    paninfoprod.add(JEANREF);    
 
		    //Le Keylistener qui permet de declencher la recherche lorsque l'on scanne un EAN
		    JEANREF.addKeyListener(
	                new KeyListener(){
	                   public void keyPressed(KeyEvent e){}
                       public void keyReleased(KeyEvent e){
 
	                //Récupération de l'ean de la jtextfield
	                String eanr = JEANREF.getText();
	                //calcul de sa longueur, elle doit être de 13
	    	           nbreean = (eanr.length());
	    	           System.out.println(nbreean);    
 
	    	         //-!-----Je cherche à mettre une condition pour n'executer la requete que si nbreean contient 13 caractères  
	                         try {     		             	 
	             		        Statement st = Connecteur.getInstance().createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
	             						   ResultSet.CONCUR_READ_ONLY );
 
	             ResultSet result = st.executeQuery("select Titre,Stock,Prix from baseoca where EAN LIKE '%"+eanr+"%' ");
	             ResultSetMetaData resultMeta = result.getMetaData();
 
	             while (result.next()) {
	            	 JTitre.setText(result.getString("Titre"));
	            	 JStock.setText(result.getString("Stock"));
	            	 float prixut = (result.getFloat("Prix"));
	            	 JPuttc.setText(Float.toString((float)prixut));   	 
 
	            	//-!-----Je cherche à récuperer dans cqte la valeur choisie de ma combobox qtp
	            	 float prixtotal = prixut * cqte;
	            	JTottc.setText(Float.toString((float)prixtotal));
 
	             }
 
	             result.close();
	             st.close();
 
	                   } catch (Exception f) {
	                	      f.printStackTrace();
	                	    }   
	                   }
 
	                   public void keyTyped(KeyEvent e){}
	               }  
	);
 
		    paninfoprod.add(LTitre);
		    paninfoprod.add(JTitre);
		    paninfoprod.add(LQte);
		    paninfoprod.add(qtp);
		    paninfoprod.add(LStock);
		    paninfoprod.add(JStock);
		    paninfoprod.add(LPuttc);
		    paninfoprod.add(JPuttc);
		    paninfoprod.add(Ltva);
		    paninfoprod.add(Jtva);
		    paninfoprod.add(LRemise);
		    paninfoprod.add(JRemise);
		    jButton1 = new JButton("Ajouter au panier");
		    paninfoprod.add(LTottc);
		    paninfoprod.add(JTottc);
		    paninfoprod.add(jButton1);
		//--------------------	   
 
		//--Affichage du mode de paiement
		    JPanel panmpaiement = new JPanel();
		    panmpaiement.setBackground(Color.white);
		    panmpaiement.setPreferredSize(new Dimension(400, 60));
		    panmpaiement.setBorder(BorderFactory.createTitledBorder("Mode de Paiement"));
		    mpaiement = new JComboBox();
		    mpaiement.addItem("Carte Bancaire");
		    mpaiement.addItem("Liquide");
		    mpaiement.addItem("Chèque");
		    panmpaiement.add(mpaiement);
		//--------------------	   
 
		//--Affichage du rendu monnaie
		    JPanel panrmonnaie = new JPanel();
		    panrmonnaie.setBackground(Color.white);
		    panrmonnaie.setPreferredSize(new Dimension(400, 60));
		    panrmonnaie.setBorder(BorderFactory.createTitledBorder("Rendu"));
		    JTTicket = new JTextField();
		    JTRecu = new JTextField();
		    JTRendu = new JTextField();
		    LTTicket = new JLabel("Total");
		    LTRecu = new JLabel("Reçu");
		    LTRendu = new JLabel("Rendu");
		    JTTicket.setPreferredSize(new Dimension(50, 25));
		    JTRecu .setPreferredSize(new Dimension(50, 25));
		    JTRendu.setPreferredSize(new Dimension(50, 25));
		    panrmonnaie.add(LTTicket);
		    panrmonnaie.add(LTRecu);
		    panrmonnaie.add(LTRendu);
		    panrmonnaie.add(JTTicket);
		    panrmonnaie.add(JTRecu);
		    panrmonnaie.add(JTRendu);
		//--------------------	
 
		    JPanel content = new JPanel();
		    JPanel gauche = new JPanel();
		    gauche.setPreferredSize(new Dimension(460, 250));
		    content.setPreferredSize(new Dimension(460, 500));
		    content.setBackground(Color.white);
		    gauche.add(panmontant);
		    gauche.add(panpanier);
		    content.add(pandatheure);
		    content.add(paninfoprod);
		    content.add(panmpaiement);
		    content.add(panrmonnaie);
		    add(gauche, BorderLayout.WEST);
		    add(content, BorderLayout.EAST);
	 }
}