Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Keyboard remappen

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

für ein Projekt von mir würd ich gerne wissen, ob und wie man eine deutsche Tastatureingabe auf eine englische Tastatureingabe um-mappen kann.

Das Problem:

Ich emuliere in JAVA die Schneider / Amstrad CPC Homecomputer.

Dort funzt die Tastatureingabe aber nur dann 100%, wenn ich lokal auf meinem PC die Tastatur auf Englisch umstelle.

Kann man dieses nicht auch in Java für eben diese Anwendung tun?

Hier meine Keyboard.java:

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) 2008

 * Company:

 * @author Markus

 * @version 5.1

 */


public abstract class Keyboard extends MatrixKeyboard {



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

  protected int row = 0;


  public Keyboard() {

    super("CPC Keyboard",8,10);

    for (int i = 0; i < bytes.length; i++)

      bytes[i] = 0xff;

    setKeyMappings();

    reset();

  }


  protected abstract void setKeyMappings();


  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];

  }


}

Dazu gehörend: KeyboardA.java
package jemu.system.cpc;


import java.awt.event.*;


/**

 * Title:        JEMU

 * Description:  The Java Emulation Platform

 * Copyright:    Copyright (c) 2002-2008

 * Company:

 * @author:      Markus

 * @version 5.1

 *

 *

 */


public class KeyboardA extends Keyboard {


  protected static final int[] KEY_MAP = {

    // Row 0

    KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_F9,

    KeyEvent.VK_F6, KeyEvent.VK_F3, KeyEvent.VK_END, KeyEvent.VK_DECIMAL,


    // Row 1

    KeyEvent.VK_LEFT, KeyEvent.VK_ALT, KeyEvent.VK_F7, KeyEvent.VK_F8,

    KeyEvent.VK_F5, KeyEvent.VK_F1, KeyEvent.VK_F2, KeyEvent.VK_F12,


    // Row 2

    -1/*KeyEvent.VK_BACK_QUOTE*/, KeyEvent.VK_ALT_GRAPH, KeyEvent.VK_ENTER,

    KeyEvent.VK_CLOSE_BRACKET, KeyEvent.VK_F4, 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

    KeyEvent.VK_NUMPAD8, KeyEvent.VK_NUMPAD2, KeyEvent.VK_NUMPAD4, KeyEvent.VK_NUMPAD6,

    KeyEvent.VK_NUMPAD5, KeyEvent.VK_NUMPAD0, -1, KeyEvent.VK_BACK_SPACE

  };


  public void setKeyMappings() {

    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

  }


}
Wer kann mir helfen???? LG Markus EDIT: Hier noch meine MatrixKeyboard.java:
package jemu.core.device.keyboard;


import java.awt.event.*;

import java.util.*;

import jemu.core.*;

import jemu.core.device.*;


/**

 * Title:        JEMU

 * Description:  The Java Emulation Platform

 * Copyright:    Copyright (c) 2007

 * Company:

 * @author

 * @version 1.0

 */


public class MatrixKeyboard extends Device {


  public static final int KEY_RIGHT = 0x10000;


  protected int[] pressMap = new int[0x1000];


  // Each key has a count of Java keys pressed for that key

  protected int[][] keyMap;


  // Each Integer Java key is mapped in this table to a mapping array

  protected Hashtable mappings = new Hashtable();


  public MatrixKeyboard(String type, int cols, int rows) {

    super("Matrix Keyboard");

    keyMap = new int[rows][cols];

  }


  public void reset() {

    for (int row = 0; row < keyMap.length; row++) {

      int[] keyRow = keyMap[row];

      for (int col = 0; col < keyRow.length; col++)

        setKeyMap(col,row,0);

    }

  }


  protected void setKeyMap(int col, int row, int value) {

    int oldValue = keyMap[row][col];

    if (oldValue != value) {

      keyMap[row][col] = value;

      //System.out.println("Key Changed: " + col + ", " + row);

      keyChanged(col,row,oldValue,value);

    }

  }


  public boolean isKeyPressed(int col, int row) {

    return row >= 0 && row < keyMap.length &&

      col >= 0 && col < keyMap[row].length && keyMap[row][col] != 0;

  }


  protected void keyChanged(int col, int row, int oldValue, int newValue) { }


  public void addKeyMapping(int key, int col, int row) {

    KeyMapping mapping = (KeyMapping)mappings.get(new Integer(key));

    if (mapping == null) {

      mapping = new KeyMapping();

      mappings.put(new Integer(key),mapping);

    }

    mapping.addMapping(col,row);

  }


  public void addKeyMappings(int[] map) {

    int cols = keyMap[0].length;

    for (int i = 0; i < map.length; i++)

      if (map[i] != -1)

        addKeyMapping(map[i],i % cols,i / cols);

  }


  public void addKeyMappings(int[][] map) {

    for (int row = 0; row < map.length; row++) {

      for (int col = 0; col < map[row].length; col++)

        if (map[row][col] != -1)

          addKeyMapping(map[row][col],col,row);

    }

  }


  public void removeKeyMapping(int key, int col, int row) {

    KeyMapping mapping = (KeyMapping)mappings.get(new Integer(key));

    if (mapping != null) {

      mapping.removeMapping(col,row);

      if (mapping.getCount() == 0)

        mappings.remove(mapping);

    }

  }


  public void keyPressed(int key) {

    keyPressed(key,KeyEvent.KEY_LOCATION_UNKNOWN);

  }


  public void keyPressed(int key, int location) {

    keyChange(key,location,1);

  }


  public void keyReleased(int key) {

    keyReleased(key,KeyEvent.KEY_LOCATION_UNKNOWN);

  }


  public void keyReleased(int key, int location) {

    keyChange(key,location,-1);

  }


  protected void keyChange(int key, int location, int step) {

//    System.out.println("key=" + Util.hex((short)key));

    int mask = 0x01 << (key & 0x1f);

    boolean right = location == KeyEvent.KEY_LOCATION_RIGHT;

    int offs = right ? 0x800 + key / 32 : key / 32;

    if (step != 1 || (pressMap[offs] & mask) == 0) {

      KeyMapping mapping = null;

      if (right)

        mapping = (KeyMapping)mappings.get(new Integer(key | KEY_RIGHT));

      if (mapping == null)

        mapping = (KeyMapping)mappings.get(new Integer(key));

      if (mapping != null)

        mapping.keyChange(step);

      if (step == 1)

        pressMap[offs] |= mask;

      else

        pressMap[offs] &= mask ^ 0xffffffff;

    }

  }


  protected class KeyMapping {

    protected int[] cols = new int[0];

    protected int[] rows = new int[0];


    protected void addMapping(int col, int row) {

      cols = Util.arrayInsert(cols,cols.length,1,col);

      rows = Util.arrayInsert(rows,rows.length,1,row);

    }


    protected void removeMapping(int col, int row) {

      for (int i = 0; i < cols.length; i++) {

        if (cols[i] == col && rows[i] == row) {

          cols = Util.arrayDelete(cols,i,1);

          rows = Util.arrayDelete(rows,i,1);

          break;

        }

      }

    }


    protected int getCount() {

      return cols.length;

    }


    protected void keyChange(int step) {

      for (int i = 0; i < cols.length; i++) {

        int col = cols[i];

        int row = rows[i];

        setKeyMap(col,row,Math.max(0,keyMap[row][col] + step));

      }

    }


  }


}

Bearbeitet von Devilmarkus

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.