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

Java Discussion :

JButton, KeyListener, touche entrée: création d'un multi-chrono


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut JButton, KeyListener, touche entrée: création d'un multi-chrono
    Bonsoir,

    J'avance pas à pas dans un projet...mais là je bloque pour comprendre comment on met en place un keylistener avec la touche entrée sur un bouton.

    J'aimerai à chaque clic sur entrée, le temps du bouton 1 s'arrête puis le 2, 3, etc...Mais je n'arrive déjà pas à l'arrêter sur un bouton. Quelqu'un peut-il m'expliquer ou m'indiquer mes erreurs, s'il vous plaît?

    Je vous remercie par avance.

    classe MainActivity
    Code java : 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
    package performyourgame.chrono.demifond;
     
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.BoxLayout;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class MainActivity extends JFrame implements KeyListener {
     
    	static Chrono chrono = new Chrono();
     
    	private static JButton btnStart = new JButton("START");
    	private static JButton[] btnLap = new JButton[13];
     
    	// private static JButton btnStop = new JButton("STOP");
     
    	private static JTextField[] time = new JTextField[13];
     
    	// private static JButton btnPause = new JButton("PAUSE");
    	// private static JButton btnResume = new JButton("REPRENDRE");
    	private static JButton btnErase = new JButton("REMISE A ZERO");
    	private static JButton btnQuit = new JButton("QUITTER");
     
    	private static JLabel allRight = new JLabel();
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setTitle("3 fois 500 mètres");
    		frame.setSize(900, 600);
    		frame.setResizable(true);
    		frame.setLocationRelativeTo(null);
    		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    		frame.setIconImage(new ImageIcon("Les-7-merveilles-du-monde.jpg").getImage());
     
    		frame.setVisible(true);
    		JPanel content = new JPanel();
    		frame.setContentPane(content);
     
    		content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));
     
    		Font f = new Font(" TimesRoman ", Font.BOLD + Font.ITALIC, 30);
    		btnStart.setFont(f);
    		btnErase.setFont(f);
    		btnQuit.setFont(f);
     
    		content.add(btnStart);
     
    		// content.add(btnStop);
    		// content.add(btnPause);
    		// content.add(btnResume);
     
    		for (int i = 1; i < 13; i++) {
    			JButton jb = new JButton();
    			JTextField jt = new JTextField();
    			btnLap[i] = jb;
    			time[i] = jt;
    			btnLap[i].setText("Temps" + i);
    			content.add(jb);
    			content.add(jt);
    			;
    		}
     
    		content.add(btnErase);
    		content.add(btnQuit);
     
    		frame.pack();
     
    		allRight.setText("@2015, All's right reserved Romuald Grandin");
    		content.add(allRight);
     
    		frame.validate();
     
    		// ================================================================= //
     
    		// ====================================================================
    		// //
     
    		// Add action listener to button
    		btnStart.addActionListener(new ActionListener() {
     
    			public void actionPerformed(ActionEvent e) {
    				// Execute when button is pressed
    				chrono.start();
     
    				for (int i = 1; i < 13; i++) {
    					final int j = i;
    					time[j].setText(chrono.getDureeTxt());
    				}
     
    			}
    		});
     
    		// Add action listener to button
     
    		for (int i = 1; i < 13; i++) {
    			final int j = i;
     
    			btnLap[j].addActionListener(new ActionListener() {
     
    				public void actionPerformed(ActionEvent e) {
    					// Execute when button is pressed
    					chrono.timeLap();
    					time[j].setText(chrono.getDureeTxt());
    				}
    			});
    		}
     
    		// Add action listener to button
    		btnErase.addActionListener(new ActionListener() {
     
    			public void actionPerformed(ActionEvent e) {
    				// Execute when button is pressed
    				for (int i = 1; i < 13; i++) {
    					final int j = i;
    					time[j].setText("");
    				}
    			}
    		});
     
    		// Add action listener to button
    		btnQuit.addActionListener(new ActionListener() {
     
    			public void actionPerformed(ActionEvent e) {
    				// Execute when button is pressed
    				frame.dispose();
    			}
    		});
     
    		// System.out.println(chrono.getDureeMs()); // affichage du résultat en
    		// millisecondes
    		// System.out.println(chrono.getDureeSec()); // affichage en secondes
    		// System.out.println(chrono.getDureeTxt()); // affichage au format "1 h
    		// 26 min 32 s"
     
    	}
     
    	@Override
    	public void keyTyped(KeyEvent e) {
     
    	}
     
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if (e.getSource() == btnLap) {
    			if (e.getKeyCode() == KeyEvent.VK_ENTER) {
     
    			}
    		}
     
    	}
     
    	@Override
    	public void keyReleased(KeyEvent e) {
    		// TODO Auto-generated method stub
     
    	}
     
    }

    classe chrono

    Code java : 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
    package performyourgame.chrono.demifond;
     
     
    public class Chrono {
     
        private long tempsDepart=0;
        private long tempsFin=0;
        private long pauseDepart=0;
        private long pauseFin=0;
        private long duree=0;
     
        private long tempsLap = 0;
     
        public void start()
            {
            tempsDepart=System.currentTimeMillis();
            tempsFin=0;
            pauseDepart=0;
            pauseFin=0;
            duree=0;
            }
     
        public void pause()
            {
            if(tempsDepart==0) {return;}
            pauseDepart=System.currentTimeMillis();
            }
     
        public void timeLap()
        {
        	tempsLap = System.currentTimeMillis();
        	duree=(tempsLap-tempsDepart);
        }
     
        public void resume()
            {
            if(tempsDepart==0) {return;}
            if(pauseDepart==0) {return;}
            pauseFin=System.currentTimeMillis();
            tempsDepart=tempsDepart+pauseFin-pauseDepart;
            tempsFin=0;
            pauseDepart=0;
            pauseFin=0;
            duree=0;
            }
     
        public void stop()
            {
            if(tempsDepart==0) {return;}
            tempsFin=System.currentTimeMillis();
            duree=(tempsFin-tempsDepart) - (pauseFin-pauseDepart);
            tempsDepart=0;
            tempsFin=0;
            pauseDepart=0;
            pauseFin=0;
            }        
     
        public long getDureeSec()
            {
            return duree/1000;
            }
     
        public long getDureeMs()
            {
            return duree;
            }        
     
        public String getDureeTxt()
            {
            return timeToHMS(getDureeSec());
            }
     
        public static String timeToHMS(long tempsS) {
     
            // IN : (long) temps en secondes
            // OUT : (String) temps au format texte : "1 h 26 min 3 s"
     
            int h = (int) (tempsS / 3600);
            int m = (int) ((tempsS % 3600) / 60);
            int s = (int) (tempsS % 60);
     
            String r="";
     
            if(h>0) {r+=h+" h ";}
            if(m>0) {r+=m+" min ";}
            if(s>0) {r+=s+" s";}
            if(h<=0 && m<=0 && s<=0) {r=h +" h" + m + " m" + s + " s";}
     
            return r;
            }
     
        }

    Mille Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il ne suffit d'implémenter l'interface KeyListener, il faut aussi enregistrer l'instance de KeyListener sur un composant. Et le composant ne recevra les evénements clavier que s'il a le focus, ce qui n'a pas grand intérêt du coup de passer par un KeyListenr : l'action du bouton fonctionne déjà toute seule sans keyListener. Si tu veux pouvoir écouter plus globalement les touches du clavier sur des boutons, tu peux utiliser les mnémoniques associés aux boutons (des raccourcis clavier pour les boutons). Ou alors utiliser un KeyEventDispatcher pour écouter encore plus globalement le clavier dans une application.

    Par ailleurs, il ne faut jamais faire de boucle dans les actionPerformed : ça ne sert à rien, surtout pour changer l'affichage. Parce que le thread qui s'occupe de l'affichage et celui qui traite les évenements est le même, et comme il ne peut faire qu'une seule chose à la fois, et bien, pendant toute la durée de la boucle tout est figé (affichage et évenement (souris, clavier...)) et le seul changement d'affichage qu'on voit, c'est le dernier: autant ne faire que celui-là ! Pour faire des changements automatique, à intervalle régulier, comme l'affichage d'un chrono qui progresse, il faut utiliser un javax.swing.Timer (ou éventuellement java.util.Timer, avec certaines précautions pour mettre à jour l'affichage (voir SwingUtilities.invokeLater)), ou un SwingWorker.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/03/2014, 14h44
  2. Touche entrée
    Par Neptune8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 08/11/2004, 16h52
  3. [D7] Création d'icône multi-résolutions
    Par Bidouille dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/10/2004, 22h05
  4. Touche "Entrée" et fenetre modale
    Par pascalT dans le forum Composants VCL
    Réponses: 5
    Dernier message: 21/07/2004, 16h57
  5. touche entrée dans formulaire
    Par pram dans le forum XMLRAD
    Réponses: 8
    Dernier message: 15/04/2003, 09h13

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