Keyboard-Translation auf Englisch umstellen

  • Themenstarter Themenstarter Devilmarkus
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

Devilmarkus

Gast
Hallo,
gibt es eine Möglichkeit in JAVA, die Keyboard-translation auf englische Tastatureingabe zu ändern?

Ich möchte mein Applet so auslegen, dass es nach Aufruf die Tastatur-Eingabe auf Englisch umstellt...

Wäre super, wenn mir jemand helfen könnte.

Gruss, Markus
 
Um mal zu verdeutlichen, worum es geht:
Ich habe einen JAVA-Homecomputer Emulator für Amstrad / Schneider CPC.

Dieser wertet (logischerweise) die Tastatureingabe aus.
Durch 'getKeyCode' wird der Code ausgewertet.
Dabei benutze ich die VK_ - events.
Da diese aber vollständig nur auf einer Englischen Tastatur funktioneren (Es gibt ja keine VK_... für ö,ä,ü etc), muss ich das Applet derzeit manuell auf englische Tastatureingabe umstellen.

Meine Frage hierbei ist halt, ob man das automatisch umstellen kann, oder ob es andere Möglichkeiten gibt...
 
Wildcard hat gesagt.:
Warum nicht einfach getKeyChar auf dem Event aufrufen?

Ganz einfach: Weil das Applet überwiegend von Spaniern, Engländern, Australiern und Franzosen mit genutzt wird...
Deshalb brauche ich nur die englische Tastaturbelegung.

Code:
package jemu.system.cpc;

import java.awt.event.*;
//import jemu.core.*;
import jemu.core.device.keyboard.*;

/**
 * Title:        JEMU
 * Description:  The Java Emulation Platform
 * Copyright:    Copyright (c) 2002
 * Company:
 * @author
 * @version 1.0
 *
 * Original keyboard without joystick
 *
 */

public class KeyboardB extends MatrixKeyboard {

  protected static final int[] KEY_MAP = {
    // Row 0
    KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_NUMPAD9,
    KeyEvent.VK_NUMPAD6, KeyEvent.VK_NUMPAD3, KeyEvent.VK_END, KeyEvent.VK_DECIMAL,

    // Row 1
    KeyEvent.VK_LEFT, KeyEvent.VK_ALT, KeyEvent.VK_NUMPAD7, KeyEvent.VK_NUMPAD8,
    KeyEvent.VK_NUMPAD5, KeyEvent.VK_NUMPAD1, KeyEvent.VK_NUMPAD2, KeyEvent.VK_NUMPAD0,

    // Row 2
    KeyEvent.VK_BACK_QUOTE, KeyEvent.VK_ALT_GRAPH, KeyEvent.VK_ENTER,
    KeyEvent.VK_CLOSE_BRACKET, KeyEvent.VK_NUMPAD4, KeyEvent.VK_SHIFT,
    KeyEvent.VK_BACK_SLASH, KeyEvent.VK_CONTROL,

    // Row 3
    KeyEvent.VK_EQUALS, KeyEvent.VK_MINUS, KeyEvent.VK_OPEN_BRACKET, KeyEvent.VK_P,
    KeyEvent.VK_QUOTE, KeyEvent.VK_SEMICOLON, KeyEvent.VK_SLASH, KeyEvent.VK_PERIOD,

    // Row 4
    KeyEvent.VK_0, KeyEvent.VK_9, KeyEvent.VK_O, KeyEvent.VK_I,
    KeyEvent.VK_L, KeyEvent.VK_K, KeyEvent.VK_M, KeyEvent.VK_COMMA,

    // Row 5
    KeyEvent.VK_8, KeyEvent.VK_7, KeyEvent.VK_U, KeyEvent.VK_Y,
    KeyEvent.VK_H, KeyEvent.VK_J, KeyEvent.VK_N, KeyEvent.VK_SPACE,

    // Row 6
    KeyEvent.VK_6, KeyEvent.VK_5, KeyEvent.VK_R, KeyEvent.VK_T,
    KeyEvent.VK_G, KeyEvent.VK_F, KeyEvent.VK_B, KeyEvent.VK_V,

    // Row 7
    KeyEvent.VK_4, KeyEvent.VK_3, KeyEvent.VK_E, KeyEvent.VK_W,
    KeyEvent.VK_S, KeyEvent.VK_D, KeyEvent.VK_C, KeyEvent.VK_X,

    // Row 8
    KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_ESCAPE, KeyEvent.VK_Q,
    KeyEvent.VK_TAB, KeyEvent.VK_A, KeyEvent.VK_CAPS_LOCK, KeyEvent.VK_Z,

    // Row 9
    -1, -1, -1, -1, -1, -1, -1, KeyEvent.VK_BACK_SPACE
  };

  protected int[] bytes = new int[16];
  protected int row = 0;

  public KeyboardB() {
    super("CPC Keyboard",8,10);
    for (int i = 0; i < bytes.length; i++)
      bytes[i] = 0xff;
    addKeyMappings(KEY_MAP);

    // For MS JVM, these keys have different codes
    addKeyMapping(0xba,5,3);  // VK_SEMICOLON = 0xba
    addKeyMapping(0xbc,7,4);  // VK_COMMA = 0xbc
    addKeyMapping(0xbd,1,3);  // VK_MINUS = 0xbd
    addKeyMapping(0xbe,7,3);  // VK_PERIOD = 0xbe
    addKeyMapping(0xdb,2,3);  // VK_OPEN_BRACKET = 0xdb
    addKeyMapping(0xdd,3,2);  // VK_CLOSE_BRACKET = 0xdd
    reset();
  }

  protected void keyChanged(int col, int row, int oldValue, int newValue) {
    if (oldValue == 0) {
      if (newValue != 0)
        bytes[row] &= (0x01 << col) ^ 0xff;
    }
    else if (newValue == 0)
      bytes[row] |= (0x01 << col);
  }

  public void setSelectedRow(int value) {
    row = value;
  }

  public int readSelectedRow() {
    return bytes[row];
  }

}

So werden die Tasten ausgelesen.
 
Kann mir hier denn wirklich niemand helfen?

Vielleicht kann man ja Tasten umleiten?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben