2010-01-22 9 views
6

क्या किसी को लाइब्रेरी (अधिमानतः जावा) के बारे में पता है जो मुझे पड़ोसी चाबियाँ यूएस_एनजीएलआईएसएच मानक कीबोर्ड के लिए एक महत्वपूर्ण इनपुट दे सकता है?कुंजीपटल लेआउट लाइब्रेरी को इनपुट कुंजी (जावा बेहतर)

उदा। अगर मैं चरित्र 'डी' इनपुट करता हूं, तो मुझे निम्न वर्ण लौटाएंगे: [डब्ल्यू, ई, आर, एस, एफ, एक्स, सी, वी]।

वैकल्पिक रूप से एक ग्रिड मैनिपुलेशन एपीआई भी काम करेगा (ताकि मैं एक क्वर्टी कीबोर्ड लेआउट के साथ ग्रिड को तुरंत चालू कर सकूं और अपने पड़ोसियों को ढूंढने के लिए इसका उपयोग कर सकूं)।

नोट 1: मैं अक्षरों को संदर्भित करने के लिए समानार्थी शब्द 'चरित्र' और 'कुंजी' का उपयोग कर रहा हूं।

नोट 2: मुझे पता है कि मैं अपने पड़ोसियों को 50-या-प्राथमिक कुंजी को मैप करने के लिए एक विधि को हार्ड-कोड कर सकता हूं। मैं एक बेहतर समाधान की तलाश में हूं।

धन्यवाद।

उत्तर

6

मैं ब्लू नवम्बर से सहमत हूं लेकिन यदि आप अधिक "गणितीय" समाधान चाहते हैं तो इसे जांचें। सबसे पहले आप वर्णों का एक ग्रिड बनाने और उसके बाद आप उन सभी कुंजी पारित कर दिया ... किंडा बेकार से एक दूरी से छोटी 2 है कि वापसी, लेकिन यह एक अच्छा व्यायाम :)

public class Test { 

    static String chars = "qwertyuiopasdfghjkl;zxcvbnm,."; 

    public static void main(String[] args) { 
     System.out.println(getNeighboringKeys('f')); 
     System.out.println(getNeighboringKeys('u')); 
     System.out.println(getNeighboringKeys('m')); 
     System.out.println(getNeighboringKeys('q')); 
    } 

    public static String getNeighboringKeys(char key) { 
     StringBuffer result = new StringBuffer(); 
     for (char c : chars.toCharArray()) { 
      if (c!=key && distance(c,key)<2) { 
       result.append(c); 
      } 
     } 
     return result.toString(); 
    } 

    public static double distance(char c1, char c2) { 
     return Math.sqrt(Math.pow(colOf(c2)-colOf(c1),2)+Math.pow(rowOf(c2)-rowOf(c1),2)); 
    } 

    public static int rowOf(char c) { 
     return chars.indexOf(c)/10; 
    } 

    public static int colOf(char c) { 
     return chars.indexOf(c) % 10; 
    } 
} 
+0

धन्यवाद। यद्यपि GetNeighboringKeys विधि को कम संचालन करने के लिए अनुकूलित किया जा सकता है। – hashable

+0

ऑप्टिमाइज़ेशन अतिरिक्त प्रयास को कम करने के लिए अतिरिक्त समय को उचित बनाने के लिए बहुत कम प्रदर्शन करेगा .. मेरा मतलब है कि ग्रिड में केवल 80 कुंजी कम या कम हैं और आप इसे शायद ही कभी कॉल करते हैं। लेकिन मेरे अतिथि बनें और अनुकूलित संस्करण पोस्ट करें यदि आप इसे करते हैं :) –

1

मैंने इस पर छोड़ दिया और बस उपयोगकर्ता को यह चुनने दें कि कौन सी कुंजी उपयुक्त रूप से आसन्न हैं। इस project में enum Key प्रत्येक आदेश को keyCode से संबंधित करता है, और this dialog उपयोगकर्ता को मैपिंग बदलने देता है। परिणाम Preferences में सहेजा गया है।

0

मुझे आश्चर्य अगर वहाँ एक समाधान नोट 2.

क्या पुस्तकालय के नीचे कर रहे होते तुलना में बेहतर है, अगर नहीं यह होगी? कुंजी का एक-दूसरे से कोई संबंध नहीं है जिसे आप बना सकते हैं।

+0

मैं एक पुस्तकालय के बारे में सोच रहा था जो एक अलग LOCALE (उदा। US_ENGLISH/FRENCH) या कीबोर्ड प्रकार (उदा। DVORAK/QWERTY) के लिए एक अलग परिणाम देता है। – hashable

+1

पर्याप्त मेला। हालांकि आपका प्रश्न विशेष रूप से US_ENGLISH बताता है। लोकेल समस्याग्रस्त होने जा रहा है; यदि मैं, यूके लोकेल के साथ यूके-कीबोर्ड उपयोगकर्ता के रूप में, अपना लोकेल यूएस पर सेट करता हूं, तो मेरी \ कुंजी अभी भी एक ही जगह पर है, लेकिन ओएस इसे यूएस कीबोर्ड से \ "के रूप में देखेगा, जो कि कीबोर्ड पर कहीं और है। – RJFalconer

0

करते समय सावधान रहें आप ऐसा करते हैं है । उदाहरण के लिए, डी के बगल में ZERSFXCV हैं, यदि आप फ्रांस में हैं तो WERSFXCV नहीं। और यदि आप ड्वोरक का उपयोग करते हैं, तो यह वाईएफजीआईएचएक्सबीएम है। यदि आप तुर्की में हैं, तो यह 567ORUTK हो सकता है।

+0

हां। यही कारण है कि मैं पुस्तकालय का उपयोग करना चाहता था अगर यह अस्तित्व में था। – hashable

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