2010-01-22 12 views
6

Qualcuno sa di una libreria (preferibilmente java) che può darmi chiavi adiacenti dato un input chiave per la tastiera standard US_ENGLISH?Libreria Layout tastiera per trovare le Chiavi adiacenti dato un tasto di input (java preferibile)

E.g. se inserisco il carattere 'd', dovrei ottenere i seguenti caratteri restituiti: [w, e, r, s, f, x, c, v].

In alternativa, potrebbe funzionare anche un'API di manipolazione della griglia (in modo che sia possibile creare un'istanza di una griglia con un layout di tastiera qwerty e utilizzarla per trovare i miei vicini).

Nota 1: Sto usando le parole "carattere" e "chiave" come sinonimi di caratteri.

Nota 2: so che è possibile codificare un metodo per mappare le chiavi primarie da 50 pollici ai loro vicini. Sto cercando una soluzione migliore.

Grazie.

risposta

6

Sono d'accordo con BlueNovember ma nel caso in cui desideri una soluzione più "matematica" controlla questo. In primo luogo si crea una griglia di caratteri e poi tornare tutti loro che ha una distanza inferiore a 2 dal tasto passato ... Un po 'inutile, ma è un bel esercizio :)

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

Grazie. Il metodo getNeighboringKeys potrebbe essere ottimizzato per eseguire operazioni minori. – hashable

+0

L'ottimizzazione comporterebbe un aumento delle prestazioni troppo piccolo per giustificare il tempo aggiuntivo per cercare di ottimizzarlo .. Voglio dire ci sono solo 80 tasti più o meno nella griglia e si chiama raramente. Ma sii mio ospite e pubblica la versione ottimizzata se lo fai :) –

1

Ho rinunciato a questo e solo lasciare all'utente di scegliere quali tasti sono adeguatamente adiacenti. In questo project un enum Key collega ciascun comando a keyCode e this dialog consente all'utente di modificare la mappatura. Il risultato viene salvato in Preferences.

0

sarei sorpreso se c'è una soluzione migliore rispetto Nota 2.

Quale sarebbe la biblioteca stia facendo sotto, se non questo? Le chiavi non hanno alcuna relazione l'una con l'altra da cui puoi costruire.

+0

Stavo pensando a una libreria che restituisce un risultato diverso per un tipo LOCALE diverso (es. US_ENGLISH/FRENCH) o tastiera (ad esempio DVORAK/QWERTY). – hashable

+1

Abbastanza giusto. Tuttavia, la tua domanda specifica specificamente US_ITALIAN. Il locale sarà problematico; se io, come utente di una tastiera del Regno Unito con le impostazioni internazionali del Regno Unito, ho impostato la mia localizzazione negli Stati Uniti, il mio tasto \ è ancora nello stesso posto, ma il sistema operativo lo vedrebbe come \ dalla tastiera statunitense, che è altrove sulla tastiera. – RJFalconer

0

Fare attenzione quando si esegue questa operazione . Ad esempio, accanto a D sono ZERSFXCV, non WERSFXCV se sei in Francia. E se usi Dvorak, è YFGIHXBM. Se sei in Turchia, potrebbe essere 567ORUTK.

+0

Sì. Questo è il motivo per cui ho voluto usare una libreria se esistesse. – hashable

Problemi correlati