2017-08-11 4 views
2

J'avais l'habitude d'utiliser la classe scanner ci-dessous pour écouter les entrées de l'utilisateur via l'invite cmd mais j'essaye d'obtenir une application Java pour écouter le texte en utilisant plutôt la méthode keyTyped.Comment utiliser keyTyped en Java?

public static void main(String[] args) throws IOException { 
    new AsteroidsGame(); 
    InputStream inputstream = new InputStream() { 

     @Override 
     public int read() throws IOException { 
      return 0; 
     } 
    }; 
    try { 
     FileOutputStream output = new FileOutputStream("HighScore.txt",true); 
     Scanner input = new Scanner(System.in); 
     PrintStream printStream = new PrintStream(output); 
     printStream.println(input.next() + " " + points); 
     printStream.close(); 
     System.out.println("Success!"); 
    } 
    catch(IOException e){ 
     System.out.println(e); 
    } 
} 

Je ne sais pas quoi faire à la méthode qui l'obtenir pour écouter les frappes au clavier et de combiner les lettres en un seul mot. (Ceci est un moyen d'obtenir un nom de personnes pour un jeu)

@Override 

public void keyTyped(KeyEvent e) {  
if(lives == 0) 
    { 
     e.getKeyCode() = KeyEvent.??? 
    } 
} 

Toute suggestion serait apprécié parce que la bibliothèque Java et le reste de l'Internet a très peu à offrir en termes d'exemples ou de l'aide.

+1

auditeurs clés/événements sont pour interfaces graphiques Swing, pas la console. Quel est le nom complet de 'KeyEvent'? – user1803551

+0

Je suis désolé, je n'ai pas fait clair. Ceci est une interface graphique swing. C'est un jeu appelé astéroïdes et c'est ma tentative d'obtenir le nom des utilisateurs après qu'ils ont fini de jouer. Quant au nom, c'est mon problème, je ne sais pas ce que j'ai besoin de mettre dans cette ligne qui acceptera quelqu'un qui tape son nom. – Thereisnospoon

+0

S'il s'agit d'une interface graphique Swing, vous n'utilisez aucun composant. Sur quoi dessinez-vous les objets du jeu? Quel composant devrait recevoir le nom? Pourquoi ne pas utiliser un champ de texte normal? Attention à l'écoute de la touche, ils peuvent vous donner des problèmes de mise au point, voir https://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-of-key-listeners. – user1803551

Répondre

1

Lorsqu'une clé textuelle est pressée qui peut être transformé en Unicode valide ombles génère événement keyTyped. Nous pouvons l'attraper. Les touches Haut, Bas etc. peuvent être traitées par les types d'événements e.getKeyCode().

public class SimpleKeyListener implements KeyListener { 

    StringBuilder sb = new StringBuilder(); 

    @Override 
    public void keyTyped(KeyEvent e) { 
     sb.append(e.getKeyChar()); 
     System.out.println(sb.toString()); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_UP) { 
      System.out.println("UP"); 
     } else if(e.getKeyCode() == KeyEvent.VK_DOWN) { 
      System.out.println("DOWN"); 
     } 
    } 
} 

Voici un monde bonjour à tester:

public class HelloWorldSwing { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("Frame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.addKeyListener(new SimpleKeyListener()); 

     JLabel label = new JLabel("Hello Swing"); 
     frame.getContentPane().add(label); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+0

J'essaie ce que tu as fait.Je vais vous dire comment ça se passe. – Thereisnospoon

+1

Ça a marché! Je vous remercie! – Thereisnospoon

+0

@Thereisnospoon vous devez [accepter la réponse si cela vous aide] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

1

Si vous avez besoin un listiners ordinaire de sorte que vous pouvez le trouver dans tout tutoriel java

Si vous avez besoin d'un auditeur personnalisé, vous pouvez voir ici: Create a custom event in Java

Son a un exemple GoID sur listuners personnalisés

+0

Merci pour le conseil. – Thereisnospoon

1

Vous avez besoin d'une sous-classe qui étend la classe KeyAdapter, cela vous donne accès à la méthode keyPressed dans la classe KeyAdapter que vous pouvez ensuite remplacer pour faire ce dont vous avez besoin dans votre programme. Le KeyEvent e est un paramètre de la méthode keyPressed qui possède le getter getKeyCode qui renvoie un entier particulier en fonction de la touche qui a été pressée See simple tutorial here. Donc, votre code serait tout simplement quelque chose comme:

public class KL extends KeyAdapter { 
    int k = 0; 
    @Override 
    public void keyPressed(KeyEvent e) { 
     if (lives == 0) { 
      k = e.getKeyCode(); 
     } 
    } 
} 

Java a des constantes intégré pour les codes d'activation afin que vous puissiez facilement les utiliser au besoin, par exemple l'int pour la clé gauche est KeyEvent.VK_LEFT.

Voir explication plus détaillée de cette explication et des KeyEvent auditeurs dans chapter 6 of Eck's excellent free text

+1

Merci. J'apprécie ton aide. – Thereisnospoon