*アップデート - 私は自分のプロジェクトをMacBookから取り出し、それをWindowsコンピュータに移動しました(同じ正確なコード)。誰がなぜこれが起こるのか知っていますか?Java - KeyBindsがキーを押した後に機能しなくなる
これはスタックオーバーフローに関する私の最初の質問ですので、正しい書式設定を行うために最善を尽くしていきます。
私はキーイベント(A & Z)を上下に動かすパドルが必要な簡単なPongプログラムを作っています。キーイベントは、単にキーを入力するだけで完璧に機能しますが、何らかの理由でキーが長すぎるとキーイベントが完全に機能しなくなるため、プログラムを再起動するまでキーの入力によっても何も登録されなくなります。
私はno availで2時間以上の答えを探しました。同様のように思われる質問はすべて、問題の焦点とInputMapの内部にJComponent.WHEN_IN_FOCUSED_WINDOWを追加するという答えで終わります。しかし、私はこれを試してみましたが、私の問題を助けたり解決したりしません。あなたがキーを押したときに通常表示されるMacOSのアクセントポップアップを無効にする必要があり
public class ColorPanel extends JPanel implements ActionListener{
public ColorPanel(Color backColor, int width, int height){
//Non Relavent coding removed
//Code for KeyBinding
InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(65, 0, false), "actionName");
im.put(KeyStroke.getKeyStroke(65, 0, true), "actionName");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, true), "actionName");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, false), "actionName");
am.put("actionName", new AbstractAction("actionName") {
public void actionPerformed(ActionEvent e) {
//System.out.println("---" + e.getActionCommand() + "---");
if(e.getActionCommand().equals("a")){
System.out.println("a!");
}else if (e.getActionCommand().equals("z")){
System.out.println("z!");
}
}
});
}
Windows 7でJDK8を使用して私がうまく動作します。JFrameで1つのパネルを使用しました。 「これはスタックオーバーフローに関する私の最初の質問です。問題を示す適切な[SSCCE](http://sscce.org/)を投稿してください。私たちはあなたのプログラムに問題の原因となるものがあるかどうかわかりません。 – camickr
私はあなたが言ったことを調べて、私はMacを使用しているとしてWindowsデバイス上で私のプロジェクトを試してみました。問題は解消した!なぜこのようなことが起こるのか分かりますか? –
私はMacを一度も使用していないので、問題の原因がわかりません。しかし、Windowsでは、キーを押したままにすると、「押された、押し込まれた、押し込まれた、.....解放された」のようなイベントが生成されます。つまり、「リリースされた」イベントは1回だけ生成されます。 Macで私はあなたが得ると信じています: "押され、解放され、押され、解放され、押され、解放された"。これは何らかの理由でリリースされたイベントが継続的に生成されるためです。たぶんこれが違いを引き起こしているのでしょうか? – camickr