import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Tastatur implements KeyListener {
private boolean[] keys = new boolean[66568];
private boolean left, right, up, down, fw, bw;
public void update() { //Den boolean-Variablen werden keys zugewiesen
this.left = this.keys[KeyEvent.VK_LEFT] || this.keys[KeyEvent.VK_A];
this.right = this.keys[KeyEvent.VK_RIGHT] || this.keys[KeyEvent.VK_D];
this.fw = this.keys[KeyEvent.VK_UP] || this.keys[KeyEvent.VK_W];
this.bw = this.keys[KeyEvent.VK_DOWN] || this.keys[KeyEvent.VK_S];
this.up = this.keys[KeyEvent.VK_SPACE];
this.down = this.keys[KeyEvent.VK_C] || this.keys[KeyEvent.VK_CONTROL];
}
public boolean getLeft() {
return this.left;
}
public boolean getRight() {
return this.right;
}
public boolean getFW() {
return this.fw;
}
public boolean getBW() {
return this.bw;
}
public boolean getUp() {
return this.up;
}
public boolean getDown() {
return this.down;
}
@Override
public void keyPressed(KeyEvent arg0) {
keys[arg0.getKeyCode()] = true;
}
@Override
public void keyReleased(KeyEvent arg0) {
keys[arg0.getKeyCode()] = false;
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
So, my problem is that if i use e.g. getLeft() somewhere it always returns false, even if the key is pressed. The methods where i use it are completely fine (if i set getleft to true manually the other methods work) and i tracked down the error to this class. As it seems, it does not recognize any keyboard input at all. So the error must be somewhere in KeyPressed, KeyReleased or update(), right? As you can see, i'm not that experienced so i would really appreciate some help. Please help me to find the reason why my KeyListener does not work.
Thanks in advance!
Need to add the GUI and bind listener to some GUI component(TextArea in
). Listener should contain logic (what to do if a key is pressed). Bellow is a minimal example.
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class TestKey extends JFrame implements KeyListener{
private static final long serialVersionUID = 1L;
JTextArea out;
public static void main(String[] args)
{
new TestKey();
}
public TestKey()
{
this.setSize(400, 200);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextArea in = new JTextArea(3,30);
out = new JTextArea(3,30);
add(in);
add(out);
in.addKeyListener(this);
setVisible(true);
}
@Override
public void keyTyped(KeyEvent e){
}
@Override
public void keyPressed(KeyEvent e) {
out.setText(Character.toString(e.getKeyChar()));
if(e.getKeyCode()==37)
{
out.setText("left");
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
out.setText("right");
}
System.out.println(e);
}
@Override
public void keyReleased(KeyEvent e) {
}
}
Output