J'ai donc 2 classes appelées Viewer et PaintWindow. Dans mon cas, la classe Viewer agit comme un contrôleur alors que j'utilise ma classe PaintWindow pour peindre des choses sur un JPanel.Comment obtenir un Keyevent d'une autre classe?
Maintenant j'essaie de mettre en place un petit jeu mais je ne comprends pas comment implémenter le KeyListener pour pouvoir contrôler le jeu. Ce que je veux, c'est qu'un auditeur écoute un keyEvent pour que je puisse décider de ce qui va se passer. Voici comment mon code ressemble à:
Viewer:
public void run() {
System.out.println("Viewer Run");
cloud1 = new ImageIcon("src/images/cloud.png");
cloud2 = new ImageIcon("src/images/cloud.png");
background1 = new ImageIcon("src/images/background.png");
playerStill = new ImageIcon("src/images/still.png");
playerRight = new ImageIcon("src/images/right.png");
playerLeft = new ImageIcon("src/images/left.png");
paintWindow = new PaintWindow(background1);
paintWindow.showImage(playerStill, 30, 370);
paintWindow.addKeyListener(new KeyTimerListener());
paintWindow.startAlarm();
}
/*
* Lyssnar på vad som händer när man trycker en viss knapp
*/
private class KeyTimerListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == 37){
System.out.print("Left");
}
else if (keyCode == 39){
System.out.print("Right");
}
else if (keyCode == 32){
System.out.print("JUMP");
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
}
Ceci est une partie de ma classe PaintWindow:
public void addKeyListener(KeyListener listener){
this.listener.add(listener);
}
private class AT extends Thread {
KeyEvent keyevent;
public void run() {
try {
Thread.sleep(1);
}catch(InterruptedException e) {
}
for(KeyListener al : listener) {
al.keyPressed(keyevent);//<-----------------------------
}
thread = null;
}
}
public void startAlarm() {
if(thread==null) {
thread = new AT();
thread.start();
}
}
je reçois une exception nullpointer comme mon KeyEvent est nul. Bien sûr, je pourrais le définir comme étant une clé spécifique, mais cela ne m'aide pas vraiment ici.
Qu'est-ce que j'ai manqué?
Quel genre de _Component_ est PaintWindow? – Berger
@Berger Que voulez-vous dire? PaintWindow est juste une classe qui crée un cadre et JPanel et peint à l'aide d'objets graphiques. – Baxtex
Un objet personnalisé ne reçoit aucun événement clé, _java.awt.Component_ fait, ou vous pouvez enregistrer un écouteur global, voir: http://stackoverflow.com/questions/5344823/how-can-i-listen-for- key-presses-dans-java-swing-across-all-components – Berger