IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Placement d'un if autour d'un KeyListener et y intégrer valeur de Combobox


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Placement d'un if autour d'un KeyListener et y intégrer valeur de Combobox
    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);
    	 }
    }

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Points : 255
    Points
    255
    Par défaut
    Salut,

    Pourquoi dans ton KeyListener ne pas mettre un if (nbreean == 13) alors tu fais ta requete, sinon pas de traitements

    et pour ta combobox, il te suffit de l'appeller depuis ton KeyListener et de recup la valeur pour la multiplier.

    Par contre attention, dans ton IHM tu melanges un peu tout (traitement métier et controle)

  3. #3
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    pour la premiere question, il suffit juste de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //calcul de sa longueur, elle doit être de 13
    nbreean = (eanr.length());
    if( nbreean != 13)
      return;
    pour la 2eme , tu fais exactement comme tu as fait pour :
    essaies de suivre les conventions de java, pour le nommage de tes propietés.

    Eric

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Noctis Voir le message
    Salut,

    Pourquoi dans ton KeyListener ne pas mettre un if (nbreean == 13) alors tu fais ta requete, sinon pas de traitements

    et pour ta combobox, il te suffit de l'appeller depuis ton KeyListener et de recup la valeur pour la multiplier.

    Par contre attention, dans ton IHM tu melanges un peu tout (traitement métier et controle)
    Merci de ces premières réponses. Peux tu être plus précis ? traitement métier et contrôle ça ne me parle pas (encore) trop

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 108
    Points : 255
    Points
    255
    Par défaut
    Regarde du coté des Design Pattern alors si tu as du temps (le MVC surtout)

Discussions similaires

  1. Encadrage bleue autour d'une publicité et soucis de placement
    Par nO_life dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 25/12/2008, 18h26
  2. Dessiner un cadre autour des composants
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 03/07/2004, 14h08
  3. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01
  4. Placement aléatoire
    Par Steph82 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/09/2003, 12h07
  5. Placement des balises avec DTD
    Par Keul125 dans le forum Valider
    Réponses: 4
    Dernier message: 28/05/2003, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo