0

アプリのキーリスナーを作成しました。ユーザーがShiftキーとキーを押したときにキーコードを識別する必要があります。

たとえば、ユーザーがShiftキー+キー2(英語キーボード)を押すと、が印刷されます@。シフトされたキーがどれであるかを識別するためにクイックスイッチ/ケースを作成しましたが、AZERTYキーボードでもMacキーボードでも機能しません。

シフトされたキーか何かを取得する方法はJavaにありますか?

説明するのはかなり難しいです。

私のJavaアプリはキーコードを取得するだけです。必要なのは、キーコードに関連付けられたシフトされたキーコードです。

元:

  • (QWERTY)2 => @; 3 =>#; 等...
  • (AZERTY)&=> 1; é=>2; 等...

今のところ、私のコードはそのようなものです(qwerty KBでのみ機能します)

String value = String.valueOf((char)key);
    if (shift)
    {
        switch (value.charAt(0))
        {
            case '1':
                return "!";
            case '2':
                return "@";
            case '3':
                return "#";

            .....

ご協力いただきありがとうございます。

よろしく。

4

3 に答える 3

1

を使用してみてくださいKeyEvent#getKeyChar()。イベントの場合Shift+a、これはを返しますA。ただし、これはメソッドでのみ機能しKeyListener#keyTyped()、他のメソッドでは機能しません(keyReleased/keyPressed)。これは、非常にうまく機能する小さな例です。さまざまなキーボードレイアウトを試しました。あなたの例(Shift+2@はqwerty配列などに戻ります。

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class Maion {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(600, 400);
        frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("keyTyped: '" + e.getKeyChar() + "'");
            }
        });
        frame.setVisible(true);
    }
}
于 2012-06-18T09:27:29.717 に答える
0

KeyEventクラスのgetModifiers()メソッドを見てください。これにより、どの特殊キーが押されたかがわかります(Alt、Ctrl、Shift)

例:

boolean oneShift = (keyEvent.getKeyCode() == KeyEvent.VK_1) && "Shift".equals(KeyEvent.getKeyModifiersText(keyEvent.getModifiers()))
于 2012-06-18T09:21:16.067 に答える
0

最後に、ユーザーがキーボードレイアウトを選択できるフレームを作成しました。次に、シフトされたキーを取得するために、単純なswith/caseを作成しました。

String value = String.valueOf((char)key);
if (shift && keyboard.equals("QWERTY"))
{
    switch (value.charAt(0))
    {
        case '1':
            return "!";
        case '2':
            return "@";
        case '3':
            return "#";
    }
}
else if (shift && keyboard.equals("AZERTY"))
{
    switch (value.charAt(0))
    {
        case '&':
            return "1";
        case 'é':
            return "2";
        case '"':
            return "3";
    }
}
else return value;

これが他の誰かに役立つことを願っています。

よろしく。

于 2012-06-29T08:31:42.057 に答える