2009-11-15 15 views
13

私が抱えている問題は、Linuxでのみ発生するバグです。キーが押されたときにスイングアプリのレコードを取得しようとしているときに、そのキーが解放されたときを検出しようとしています。 KeyListenerが私のためにこれを処理することになっているので、これは問題にはならないはずです。Swingで繰り返されるkeyPressed()/ keyReleased()イベントを終了させる方法

問題は、私がキーを押したままにすると、ただ一つのkeypressed()の代わりに、たくさんのkeyPressed()/ keyReleased()イベントが発生するということです。 Linux上でキーが実際にリリースされたことを知っている人には、解決策や回避策がありますか?

ありがとうございます。

答えて

14

だから私は を持っています問題は、これは、Linuxの問題であるはいのみ のLinux

上を発生するバグのように見えます。

Windowsの場合、キーを押したままにすると、複数のKeyPressedイベントが発生しますが、KeyReleasedイベントは1つのみ発生します。

この質問はよく聞かれ、私は良い解決策を見たことがありません。

しかし、私は解決策の基礎はタイマーを使用することだと思います。キーを押すとタイマーが始まります。別のkeyPressを取得したら、タイマーを再起動します。したがって、タイマー間隔がキーボードのリピートレートより大きい限り、キーが押されたときにタイマーは継続的にリセットされます。 keyPressesが生成されなくなると、タイマーが起動し、キーが解放されたとみなされます。これは、keyReleasedの処理が遅れることを意味します。

+1

Javaで「キーボードのリピートレート」を取得するにはどうすればよいですか?それはOSのユーザー環境設定ですよね? –

2

この質問はhereに複製されます。

Here's a hackは、アプリケーションの先頭にインストールできるAWTEventListenerとして実装されています。

2

あなたはかなり良い回避策hereを見つけることができます。

+0

リンクが死んでいます:-( – Thomas

+0

+1便利な例とリンクを復元します。ありがとう! –

関連する問題