2016-11-14 4 views
2

私は現在Javaで電卓を構築しており、キーリスナー を実装し始めました。それは非常にうまく動作しますが、キャレット記号(^)を入力しようとするとすぐには登録されません。最初に別のキーを押す必要があります。キャレット(^)はすぐに登録されません。 Javaキーリスナー

普通のテキスト文書にキャレット を入力しようとしたときと同じ動作を使用していると思います。しかし、この行動を回避する方法はありますか?

それが助け場合は、ここでキーイベントを処理するために、私のコードは次のとおりです。

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (key.matches("[0-9*/+-=.()^%]")) { 
     controller.getButton(key).fire(); 
    } 
} 

EDIT:回避策を見つけました。 Eli Sadoffが言いましたように、私のキャレットはキーボードの死んだ鍵です。私は、キャレットのための結合は、「シフト+¨」であることから、私はこのようにそれを解決することができました:

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (ke.isShiftDown() && ke.getCode() == KeyCode.DEAD_DIAERESIS) { 
     controller.getButton("^").fire(); 
    } 

    else if (key.matches("[0-9*/+-=.()%]")) { 
     controller.getButton(key).fire(); 
    } 
} 
+0

'+'、 '('、 ')'、 '%'と同じ問題がありますか? –

+0

いいえ、どちらもありません。 – Javatar4ever

+1

あなたのキャレットキーはあなたのコンピュータの死んだキーですか? (意味は '^'を入力し、次に 'e'は 'ê'を生成します) –

答えて

2

問題は、あなたが死んでキーとしてコンピュータの扱いに^を使用している入力キーボードレイアウトでありますそれは組み合わせ発音区別記号であるためです。これを解決する方法は、入力キーボードのレイアウトを、^を組み合わせの発音区別符として扱わないキーボードに変更することです。これは、^ + eと入力して、それがêまたは^eになるかどうかを調べることによってテストできます。

+0

これは本当に正しいです、ありがとう! – Javatar4ever

+1

問題の編集として問題に対処方法を投稿しました。 – Javatar4ever

+0

@ Javatar4ever素敵な仕事! –

関連する問題