为什么KeyStroke中没有类似的keyChar和keyCode?

时间:2014-03-06 13:07:51

标签: java swing

我不明白为什么这会给出错误并且不被认为是平等的。

KeyStroke test1 = KeyStroke.getKeyStroke('1');
KeyStroke test2 = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0);
System.out.println(test1.equals(test2));

在哪种情况下这不相同,即这是一个特征还是一个错误?

1 个答案:

答案 0 :(得分:1)

您在第一行传递的内容是CharacterKeyEvent.VK_1是以{Hex(0x30)表示的Integer。 数字和键由基元类型int表示,带有十六进制值。

例如:从0到9的数字是以这种方式表示的六位数:

public static final int VK_0              = 0x30;
...
public static final int VK_9              = 0x39;

修改

他们是不同的,因为第一个KeyStroke认为数字1是打字的 第二个KeyStroke正在考虑按下1。
它们不是不同的键,而是不同的行为

    KeyStroke test1 = KeyStroke.getKeyStroke('1', KeyEvent.KEY_LOCATION_UNKNOWN);
    KeyStroke test2 = KeyStroke.getKeyStroke(KeyEvent.VK_1, KeyEvent.KEY_LOCATION_UNKNOWN);

    System.out.println(test1.equals(test2));

这将是true

那个0参数KeyStroke.getKeyStroke(KeyEvent.VK_1, 0); 代表常量KeyEvent.KEY_LOCATION_UNKNOWN

文档说:

  A constant indicating that the keyLocation is indeterminate
  or not relevant.
  KEY_TYPED events do not have a keyLocation; this value
  is used instead.