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 :

Test si touche pressée durant xx secondes


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Test si touche pressée durant xx secondes
    Bonjour à tous,

    Je débute en Java et j'ai cherché un peu partout mais rien qui me convienne.

    Je souhaite tester si une touche est pressée, mais pas suite à un évènement. Apparemment il faut que je fasse du multi-thread et j'ai du mal à comprendre.
    J'aimerais faire ce test durant une certaine période, disons 5 secondes par exemple, pendant ce temps mon programme ne ferait rien d'autre que attendre.

    D'après ce que j'ai vus il n'y a pas d'équivalent à choice /T xx sous Msdos.
    C'est bien dommage car c'est ce qui ressemble à ce que je cherche.

    Même un bout de code partiel me serait très utile.

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Vous êtes dans quoi, une page web ou un client lourd de type swing ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    oups...Swing

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Alors c'est simplement du java mais je ne comprends pas cette phrase :

    Je souhaite tester si une touche est pressée, mais pas suite à un évènement.
    Tu va forcement recevoir un event KeyPress pour dire qu'une touche a été pressé. Après tu gères un historique pour voir quelles touches sont pressés ou relachés et quand. Tu devrais pouvoir déterminer si une touche en particulier a été pressé 5 secondes au moins.

    Tu pensais faire quoi ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Merci de te soucier de mon pb Jimmy.
    En fait j'aimerais faire un truc du genre:

    ......
    boucle(de 5 secondes) {
    si(touche pressée égale à CTRL) {
    faire ceci; }
    }
    faire autre chose;
    ......

  6. #6
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    moi je ferais un truc du genre (attention c'est une esquisse...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    hour = ....
     
    while(hour < hour + 5 sec)
        if(keypressed == true){
            //le code si ton bouton est pressé
            // ou appel de méthode ou autre
        }
    }
    avec un listener qui fera juste un

    si le bouton est pressé.

    Je pense que c'est assez simple, et pour ma part, pas d'idée plus simple en fait pour le moment... Mais quoi qu'il en soit, il me semble impératif d'écouter l'évenement...
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Un truc comme ça pourrait marcher.

    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
    package fvt.pressed;
     
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JLabel;
    import javax.swing.SwingConstants;
     
    @SuppressWarnings("serial")
    public class MyFrame extends JFrame implements KeyListener{
    	// Constantes
    	private final static int SEC_TO_PRESSED = 5000;
     
    	// Composants
    	private JPanel contentPane;
    	private JLabel label;
     
    	// Attributs
    	private boolean pressed = false;
     
    	// Constructeur
    	public MyFrame() {
    		initFrame();
    		initListeners();
    	}
     
    	private void initFrame(){
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(0, 0, 450, 300);
    		setLocationRelativeTo(null);
     
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		contentPane.setLayout(new BorderLayout(0, 0));
    		setContentPane(contentPane);
     
    		label = new JLabel("Touche relachée");
    		label.setHorizontalAlignment(SwingConstants.CENTER);
    		contentPane.add(label, BorderLayout.CENTER);
    	}
     
    	private void initListeners(){
    		addKeyListener(this);
    	}
     
    	private void setText(final String txt){
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				label.setText(txt);
    			}
    		});
    	}
     
    	// Listeners
    	public void keyPressed(KeyEvent e) {
    		if(e.getKeyCode() == KeyEvent.VK_CONTROL){
    			pressed = true;
    			new MyThread().start();
    		}
    	}
     
    	public void keyReleased(KeyEvent e) {
    		if(e.getKeyCode() == KeyEvent.VK_CONTROL){
    			pressed = false;
    		}		
    	}
     
    	public void keyTyped(KeyEvent e) {}
     
     
     
    	// main
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					MyFrame frame = new MyFrame();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	private class MyThread extends Thread {
    		private int sec = 0;
     
    		@Override
    		public void run() {
    				while (sec < MyFrame.SEC_TO_PRESSED*1000 && pressed){
    					if(sec%1000==0)setText("Appuyé depuis " + sec/1000 + " secondes");
    					try {
    						sleep(10);
    					} catch (InterruptedException e) {e.printStackTrace();}
    					sec += 10;
    				}
    				if(pressed){				
    					setText(sec/1000 + " secondes !!");
    				}else{					
    					setText("Touche relachée");
    				}
    		}		
    	}
    }
    Il y a surement possibilité de faire mieux.

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Nickel, je vais regarder ça.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] test si control pressé
    Par seurjer dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2007, 23h01
  2. Identifier la combinaisons de touches pressées
    Par belocom dans le forum VB.NET
    Réponses: 3
    Dernier message: 29/05/2007, 10h49
  3. [formulaire] événement touche pressée
    Par Guizbizet dans le forum IHM
    Réponses: 8
    Dernier message: 10/01/2007, 15h01
  4. [TMemo] Comment insérer les touches pressées ?
    Par Alexandre` dans le forum Composants VCL
    Réponses: 8
    Dernier message: 28/03/2005, 16h36

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