java - 继续获取键盘代码,而不是从 Java 中的键盘输入字符
问题描述
当我在键盘上输入一个键时,我一直遇到问题,它一直返回键盘代码,例如,当我按下 1 时,它返回一个值,49
我尝试更改要使用的数据类型char
,但问题仍然存在。它似乎只以我的一种方法输出键盘代码,但不适用于addKeyListener
我拥有的方法。当我打印出SETSIZE
变量时,它返回正确的输入,但是在我调用参数的方法assignMove
中num
不断输出键盘代码,我不知道为什么。将不胜感激。
PanelCell 类
private GamePanel panel;
private int row;
private int col;
public static final char SETSIZE = 5;
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char SETSIZE = e.getKeyChar();
panel.assignMove(row, col, SETSIZE);
}
});
游戏面板类
void assignMove(int row, int col, int num)
{
System.out.print(num);
if ((row<1) || (row>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid row (" + row + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid row (" + row + ")");
}
if ((col<1) || (col>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid column (" + col + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid column (" + col + ")");
}
if (game.isAssigned(row, col)) {
JOptionPane.showMessageDialog(null,
"the cell at (" + row + "," + col + ") is assigned (" + game.getNum(row,col) + ")",
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("the cell at (" + row + "," + col + ") is assigned (" + game.getNum(row,col) + ")");
}
if ((num<1) || (num>Futoshiki.SETSIZE)) {
JOptionPane.showMessageDialog(null,
"invalid value " + num,
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid value " + num);
}
if (!game.isValidAssign(row, col, num)) {
JOptionPane.showMessageDialog(null,
"invalid value assignment " + row + " " + col + " " + num,
"Futoshiki",
JOptionPane.DEFAULT_OPTION);
throw new FutoshikiException("invalid value assignment " + row + " " + col + " " + num);
}
Assign userMove = new Assign(row, col, num);
System.out.print("row " + row + " " + "col "+ col + " " + "num " + num);
game.assign(userMove);
}
解决方案
char
是 Java 中的原始类型。它是一个 16 位无符号整数,表示 Unicode 代码点。它不包含出现在键盘上的值。
您可以使用类的方法java.lang.Character
来获取“键盘”值。
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char ch = e.getKeyChar();
if (Character.isDigit(ch)) {
panel.assignMove(row, col, Character.getNumericValue(ch));
}
}
});
或者,您可以简单地检查该值。
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char ch = e.getKeyChar();
int val = (int) ch;
if (val >= 48 && val <= 57) {
panel.assignMove(row, col, val - 48);
}
}
});
推荐阅读
- firebase - Firebase 存储是否支持负载平衡(/GoogleCDN/CloudArmor)?因为安全规则
- reactjs - 当我尝试运行“yarn build”时出现此错误
- twig - Symfony 4.4.2 切换语言环境 - TWIG 中的语言环境丢失
- visual-studio-code - 与 Visual Studio Code(实时服务器安装)相关的问题
- python - 如何在 control.root_locus 中获得欧米茄阻尼图?
- flutter - flutter web navigation 2 检测浏览器返回
- javascript - 在 Safari 上使用 RecordRTC 时遇到问题
- windows - 将管理员/UAC 图标/符号添加到 Inno Setup 安装程序图标
- c++ - 如果抽象也可以在程序上完成,那么抽象如何成为 OOP 的优势?
- python - 如何遍历xarray并使用python中的索引进行计算