文字が入力されるようにダウンして、Shiftキーを必要とする場合はどのように決めるのですか?
質問
私は、Robotクラスを使用して文字列を入力するためにいくつかのコードを書いています。一部のキーは、キーコードを持っていない以外、彼らが実際にシフト +他のいくつかのキーの組み合わせであるため、すべてが、(まあ、私は文字のキーコードを取得するには、大きなswitch文を使用する必要があります)主に良いです。大文字の場合、Character.isUpperCase(c)
を使用して、チェックするのは簡単ですが、彼らはthierキーストロークを生成するために押圧されるようにシフトを必要としないものの、このような!@#$%^&*()_+
や様々な句読点など、すべての記号は、「大文字」とは見なされません。私はそれをグーグルで試してみましたが、ちょうど満足な答えとフォーラムの投稿を見つけました。ニーズがシフト文字が押されるかどうかを判断するためにどのような方法があり、そうであれば、どのような文字は「非シフト」バージョンです?
編集:ここで私が持っているコードは、これまでのところです。
。public void GenerateKeyTyped(char c) {
if (Character.isUpperCase(c)) {
r.keyPress(KeyEvent.VK_SHIFT);
}
r.keyPress(GetKeyCode(c));
r.keyRelease(GetKeyCode(c));
if (Character.isUpperCase(c)) {
r.keyRelease(KeyEvent.VK_SHIFT);
}
}
解決
私は(私はこれらの文字のために地図を使用して終了)を直接あなたの問題を解決する方法を知らないが、それはあなたにいくつかのアイデアを与えるかもしれません。
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main3 {
public static void main(String[] args) {
try {
Robot robot = new Robot();
HashMap<String, String> map = new HashMap<String, String>();
map.put("!", "1");
map.put("@", "2");
map.put("#", "3");
char[] charz = "abcdefgABCDEFG123!#".toCharArray();
for(int i = 0; i < charz.length; i++)
{
System.out.print(charz[i] + " : ");
boolean shiftRequired = false;
String key = String.valueOf(charz[i]);
String value = map.get(key);
if (value != null)
{
shiftRequired = true;
key = value;
}
else if (Character.isUpperCase(key.charAt(0)))
{
shiftRequired = true;
}
else
{
key = key.toUpperCase();
}
KeyStroke ks = KeyStroke.getKeyStroke("pressed " + key.toUpperCase());
int keyCode = ks.getKeyCode();
System.out.println(keyCode);
if (shiftRequired)
robot.keyPress(java.awt.event.KeyEvent.VK_SHIFT);
robot.keyPress( keyCode );
robot.keyRelease( keyCode );
if (shiftRequired)
robot.keyRelease(java.awt.event.KeyEvent.VK_SHIFT);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
他のヒント
私は、あなたが探していることは可能であるかはわかりません。あなたがあなた自身のテーブルを作成し、それはその後、多くの言語が彼らの特定の文字セットのために、より適している、独自のキーボードレイアウトを持つ(唯一のキーボードレイアウトのために働くだろうことを心に留めておくことができ、また、おそらくそれはだ持ってDvorakレイアウトがありますあなたはサポート、およびそれらのためのカスタムテーブルを作成したいすべてのキーボードレイアウトを考慮していない限り)シフトされていない鍵対シフト自身ます。
あなたはAWTクラスを使用することはできますか?このような何かが動作します。
AWTKeyStroke ks = AWTKeyStroke.getAWTKeyStroke('!');
int modifers = ks.getModifiers();
if ((modifiers & KeyEvent.VK_SHIFT) == KeyEvent.VK_SHIFT) {
// Shift pressed
}
これらの記号キーは、範囲0x21 - 0x2B
に位置しています
おそらく、他のすべてのシンボルを認識するためのASCIIテーブルで見ることができます。