Philipp Gressly wrote:
Hello everybody
I am programming a "moon-lander" and want to check every 100 ms if
a certain key is pressed. The keyboard events (key-pressed,
key-released and key-typed) are not helpful, because the operating
System (linux im my case) generates key-releases and key-presses
at its own (depending on the "key repeat speed").
Is there a command to satisfy the following interface easily?
public interface KeyState {
boolean isKeyDown(char keyCode);
}
With all your help, I have implemented the code below.
It works in 99%, because the gnome "keyPressed.getWhen()" has
mostly the same value as a previous "keyReleased.getWhen()" in case
of the "key-repeat-sequence". Very rarely the below mentioned code
reports "down: false", but it should be "down: true". It would be
interesting to have some feedback about other operating systems.
Thanks
import javax.swing.JFrame;
import java.awt.event.*;
/**
* @author Philipp Gressly (phi@gressly.ch)
* after a code from Luther :
http://forums.sun.com/thread.jspa?threadID=698156
*/
public class IgnoreRepeats extends JFrame implements KeyListener,
Runnable {
private long oldWhen = 0L;
public boolean down;
/* starter */
public static void main(String[] _) {
new IgnoreRepeats("Test Frame").top(); }
public IgnoreRepeats(String name){
super(name); }
private void top() {
super.addKeyListener (this) ;
super.setDefaultCloseOperation (EXIT_ON_CLOSE);
setSize (300, 300) ;
setVisible (true) ;
new Thread(this). start(); }
public void run() {
while (true) {
System.out.println("down: " + down);
try {
Thread.currentThread().sleep(40);