2015-01-16 7 views
5

मुझे जावा रोबोट कक्षा के माध्यम से एक विशेष पत्र (तुर्की आदि) दबाकर समस्या है। मैं कुंजी दबाकर एक तरीका है जो alt + keycode के रूप में काम करता है। मैं कुछ विशेष अक्षरों को वर्तमान कीकोड में परिवर्तित नहीं कर सकता। तो मैं इसे कैसे हल कर सकता हूं। Thanxजावा रोबोट वर्ग प्रेस तुर्की पत्र (Ö, ö, Ş, ş, Ü, ü, Ğ, ğ, İ, ı, Ç, ç, Ə, ə)?

उदाहरण के लिए:

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 
System.out.println(ks.getKeyCode()); 
Output : 246 
// So alt+0246='ö' 
//but if I convert 'ş' to keycode 
//Output is 351 . So alt+351= '_' and alt+0351= '_' 
//What is the Correct combination for 'ş'. same for 'Ş', 'ş','Ğ', 'ğ', 'İ', 'ı', 'Ə', 'ə' 

कुंजी दबाने:

public void altNumpad(int... numpadCodes) { 
    if (numpadCodes.length == 0) { 
     return; 
    } 

    robot.keyPress(VK_ALT); 

    for (int NUMPAD_KEY : numpadCodes) { 
     robot.keyPress(NUMPAD_KEY); 
     robot.keyRelease(NUMPAD_KEY); 
    } 

    robot.keyRelease(VK_ALT); 
} 
+0

क्या बीएमपी के बाहर इनमें से कुछ पात्र हैं? – fge

+0

[इस लिंक] से (http://www.fileformat.info/info/unicode/char/015f/index.htm), ऐसा लगता है कि विंडोज के तहत आपको Alt + 015F का उपयोग करना चाहिए। मेरे पास विंडोज नहीं है इसलिए मैं परीक्षण नहीं कर सकता ... – fge

+0

काम नहीं करता है। धन्यवाद – Bertrand

उत्तर

1

मैं क्योंकि जावा डॉक्स कहते हैं कि तुम क्यों

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 

किया यकीन नहीं है,

public static KeyStroke getKeyStroke(Character keyChar, 
       int modifiers) 
//Use 0 to specify no modifiers. 

आपको अधिभार के लिए 0 से अधिक संशोधक को पास करने की आवश्यकता है।

आप की तरह एक संशोधन पारित करने के लिए प्रयास करना चाहिए,

java.awt.event.InputEvent.ALT_DOWN_MASK 

तो शायद की कोशिश करनी चाहिए,

KeyStroke ks = KeyStroke.getKeyStroke('ö', java.awt.event.InputEvent.ALT_DOWN_MASK); 
संदर्भ के रूप में

जावा दस्तावेज़: http://docs.oracle.com/javase/7/docs/api/javax/swing/KeyStroke.html#getKeyStroke(char)

आप ठीक ढंग से से एक उत्पादन नहीं मिल सकता है तब आपको इस तथ्य पर विचार करना चाहिए कि चरित्र यूटीएफ -8 है, यह उस संबंध में आपकी मदद कर सकता है, Java, Using Scanner to input characters as UTF-8, can't print text

2

चरित्र संख्या यूनिकोड मानक में defiunied हैं। एचटीएमएल में भी प्रयोग किया जाता है, इसलिए आप this table का उपयोग कर सकते हैं।

वैसे भी यदि आप स्रोत कोड में वर्ण देखते हैं तो इस तथ्य पर निर्भर करता है कि संपादक फ़ाइल को सही तरीके से व्याख्या करता है (यूटीएफ -8 को प्राथमिकता दी जाती है)।

सेकेंड प्रयुक्त संपादक के पास एक फ़ॉन्ट स्थापित होना चाहिए जिसमें इन वर्ण शामिल हैं। इसलिए यदि आप alt + 0351 टाइप करते हैं और प्राप्त करते हैं और '_' यह एक प्रतिस्थापन चरित्र हो सकता है जो दर्शाता है कि फ़ॉन्ट इस चरित्र को याद करता है।

और अंत में आपको जावा कंपाइलर को बताना चाहिए कि स्रोत कोड यूटीएफ -8 है - बस सुनिश्चित करने के लिए (javac -encoding utf8)।

0

मैं जानता हूँ कि यह एक देर से जवाब है, लेकिन यहाँ यह है कि कैसे मैं तुर्की QWERTY कीबोर्ड के लिए इस समस्या को संभाल

static void writeRobotWrite(Robot robot, String keys) throws InterruptedException { 
    .... 
     try { 
      robot.keyPress(keyCode); 
      robot.delay(20); 
      robot.keyRelease(keyCode); 
      robot.delay(20); 
     }catch (IllegalArgumentException e) 
     { 
      pressUnicode(c, robot); 
     } 

    } 
} 

असल में जब मैं रोबोट के लिए अपरिभाषित कीकोड मिला मैं pressUnicode समारोह जो फोन:

static void pressUnicode(char c, Robot robot) 
{ 
    String cantRecognize = ""+c; 
    StringSelection selection = new StringSelection(cantRecognize); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selection, null); 
    robot.keyPress(KeyEvent.VK_CONTROL); 
    robot.keyPress(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_CONTROL); 
} 

बस मैं सिर्फ चरित्र की प्रतिलिपि बना रहा हूं और चिपका रहा हूं। यह सभी अपरिभाषित पात्रों के लिए काम कर रहा है। :)

संबंधित मुद्दे