I have a simple Gui
public Gui(){
ablak = new JFrame("Snake game");
ablak.setVisible(true);
ablak.setSize(new Dimension(600,600));
ablak.setFocusable(true);
ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ablak.add(new Grid());
ablak.add(new Key());
}
And a key class to listner to keyevents
package snake;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Key implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP){
System.out.println("Hi");
}
}
@Override
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
As you can see pressing the Up arrow key should say something like Hi, but nothing happens.
If i try to add(new Key()) in Gui class it gives an error.
What am i doing wrong?
Thank you
解决方案
You need to use the addKeyListener() method:
public class Test2 {
public static void main(String[] args) {
JFrame ablak = new JFrame("Snake game");
ablak.setVisible(true);
ablak.setSize(new Dimension(600,600));
ablak.setFocusable(true);
ablak.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ablak.addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP){
System.out.println("Hi");
}
}
@Override
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
});
ablak.setVisible(true);
}
}