Comment détecter une pression sur une touche en Java
Mon fils (11 ans) qui est l'apprentissage de Java va entrer à une question et un peu de code. Il me dit qu'il n'a pas été en mesure de trouver la réponse à cette question sur le site. Vous le constaterez à la lecture de ma version modifiée de sa question. Merci beaucoup.
Comment puis-je détecter une pression de touche en java, Mon IDE est appelé eclipse et j'ai fait quelques classes. J'ai trouvé le code à l'intérieur keyconfigofplayer de l'internet et l'a changé pour étendre la classe de joueur. Je veux qu'il sorte quand j'ai maintenez enfoncée une touche un rectangle ou un ovale se déplace sur l'écran, comment pourrais-je faire cela? Pour une raison quelconque il l'habitude de taper le code correctement, c'est pourquoi mes importations n'ont pas l'astérisque et un look bizarre. désolé à ce sujet. veuillez l'ignorer. Je ne peux pas corriger ça:(.
voici mon code:
code pour fenêtre:
import javax.swing.*;
import java.awt.*;
public class window {
public static void main(String[] args) {
//TODO Auto-generated method stub
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setSize(600, 600);
player p = new player();
f.add(p);
keyconfigofplayer key = new keyconfigofplayer();
p.add(key);
f.add(key);
}
}
//this class is the player graphic
import javax.swing.*;
import java.awt.*;
public class player extends JPanel {
int x = 50;
int y = 50;
public void paint() {//This is where the graphic is painted to the screen
repaint();
}
public void paintComponent(Graphics g) {
//This is where the graphic is 'manufactured'
super.paintComponent(g);
g.setColor(Color.GREEN);
int width = 20;
int height = 20;
g.fillRect(x, y, width, height);
int width2 = 10;
int height2 = 10;
g.fillOval(x, y, width2, height2);
}
}
//the keyconfigofplayer class(where i think the problems are):
//this class is the player graphic
import javax.swing.*;
import java.awt.*;
public class player extends JPanel {
int x = 50;
int y = 50;
public void paint() {//This is where the graphic is painted to the screen
repaint();
}
public void paintComponent(Graphics g) {
//This is where the graphic is 'manufactured'
super.paintComponent(g);
g.setColor(Color.GREEN);
int width = 20;
int height = 20;
g.fillRect(x, y, width, height);
int width2 = 10;
int height2 = 10;
g.fillOval(x, y, width2, height2);
}
}
Les classes, j'ai essayé de commenter, si bien que vous savez ce que cela signifie.
J'ai eu keyconfigofplayer du code de la chaîne youtube macheads101 la programmation d'interface graphique en java de l'épisode 12 ou 11 je crois. Je pense que mon problème n'est pas à propos de la mise à jour de l'image, mais sur la détection lorsque la touche est enfoncée puis relâchée. Alors peut-être que je devrais faire une boucle while en déclarant que:
si cette touche est enfoncée, + 10 pour les coordonnées x jusqu'à ce que sa fait et constamment mise à jour de la position.
Je voudrais également demander, lors de l'utilisation de public, privé et non avenu? Je ne comprends pas 🙁 et si nous avons fait l'étend joueur implémente chose correctement. J'ai essayé de modifier macheads101 du code avec soin, quand j'ai copié exactement, il ne fonctionne pas trop. Donc, je ne sais pas vraiment quel est le problème. Je serais reconnaissants si vous avez répondu à ma question et m'a aidé à modifier mon code. En fin de compte, ça va être un jeu de tir, comme le jeu d'arcade "space invaders" ou " dragon shooter.
Oh, encore une chose. Vous pouvez faire des jeux en Swing, mais vous trouverez que vous êtes assez limité puisqu'il est plus conçu pour un type de logiciel. Pour écrire des jeux en java vraiment vous avez besoin d'une bibliothèque graphique. Par exemple ce tutoriel de la série fait un tireur néon dans jME3: gamedevelopment.tutsplus.com/tutorials/...
Concernant le premier point, je dois dire que vous êtes le parent de l'année. Votre fils a beaucoup de potentiel pour la programmation. Continuez à encourager lui!
"Mon fils (11 ans) qui est l'apprentissage de Java va entrer à une question et un peu de code. Il me dit qu'il n'a pas été en mesure de trouver la réponse à cette question sur le site. Vous le constaterez à la lecture de ma version modifiée de sa question. Merci beaucoup." Bon travail en battant la COPPA sur la tête avec un bâton! Les gens comme vous que le monde va 'tour.
OriginalL'auteur user3343497 | 2014-02-23
Vous devez vous connecter pour publier un commentaire.
Lire sur
java.awt.event.KeyListener
Un code devrait ressembler à ceci:
OriginalL'auteur
Donc GUI sont déterminées par les événements. Tout ce qui se produit est entraîné par un événement. Une pression sur une touche est un événement. Un composant doit écouter les événements, et de faire quelque chose lorsque l'événement est déclenché. Vous pouvez en savoir plus sur la façon d'écrire les différents auditeurs ici. Les auditeurs sont assez faciles à reconnaître (par nom) comme
KeyListener
ouMouseListener
.ActionListener
est également assez commun, on appuie sur un bouton. Vous voulez aller à l'aide des tutoriels et apprendre les différents auditeurs.Remarque qu'avec de Swing il y a des problèmes de focus avec l'aide d'un
KeyListener
de sorte qu'il est préférable d'utiliser raccourcis. Comme indiqué dans leKeyListener
tutoriel:Un tutoriel pour les raccourcis clavier peuvent être trouvés ici et un exemple peut être vu ici. Voici le gif à partir de l'exemple, en montrant le mouvement de rectangle avec une touche à l'aide de raccourcis clavier
Mise à JOUR juste un avis.
paint
méthode deJPanel
Jamais appel
repaint()
de l'intérieur d'unpaint/paintComponent
méthodeSe débarrasser de le code ci-dessus.
OriginalL'auteur Paul Samsotha
Il y a une grande bibliothèque qui fonctionne bien et il est à l'écoute d'événements mondiaux. C'est la seule chose qui a fonctionné sans aucun problème pour moi:
https://github.com/kwhat/jnativehook
Il s'empare de chaque événement dans le système, assez cool pour tout développement.
Vous pouvez l'utiliser comme ceci:
OriginalL'auteur Rav
Je ne vois rien dans votre code qui, de fait, à l'écoute de touches, ou qui modifie la position de x et y. Le cercle se déplace seulement si vous changez de x et y et de repeindre l'écran.
Vous avez mis en place le panel, etc ici, mais pas réellement ajouté quelque chose à répondre à l'action de l'utilisateur. Vous aurez probablement besoin d'ajouter un
KeyListener
quelque part pour répondre à la pression des touches. C'est probablement dans le tutoriel que vous faites ou dans une précédente ou plus tard tutoriel.OriginalL'auteur Tim B
KeyListener
Vous devriez mettre son KeyListener Événement dans la classe que vous n'en avez pas besoin dans la Méthode main!
Plus sur les Clés ici: KeyListeners
Public et Privé:
Maintenant pour le Public et le Privé, il y a déjà une réponse sur StackOVerflow qui, je pense, fait le travail très bien! Ici
Fonctions/Méthodes et Nuls:
Que du Vide, Il est utilisé dans les fonctions où vous souhaitez retourner rien! Je ne sais pas comment bien vous savez sur les fonctions, mais laissez-moi vous donner un exemple:
Ce que ce n'est qu'il ajoute les deux ints donné que x et y, puis renvoie la somme d'un nombre entier!
Avec le vide de ce que vous pouvez faire est de:
Ici vous retournez à rien, mais il a encore des magasins de x+y, en somme!
Dans votre classe:
Pour la fonction void vous n'avez pas besoin de créer une variable depuis il ne marche pas retourner une valeur, c'est plutôt elle définit la valeur de la fonction. Tout ce que vous devez faire est d'appeler
Si vous avez besoin de plus d'aide juste un commentaire! 🙂
Aussi je trouve ça génial que votre fils est si intéressé par Java à un si jeune âge. Grande Parentalité 😀
Où dois-je placer le code ci-dessus dans mon programme, désolé mais je ne comprend pas le keyconfigofplayer classe il commence avec
public class keyconfifgofplayer s'étend joueur implémente Actionlistener, keyListener {
Est-ce correct pour une classe?
vous n'avez pas besoin de la mettre en œuvre dans la classe!
OriginalL'auteur Shrey