在java中,继续从键盘获取键盘代码,而不是字符输入

afdcj2ne  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(257)

我一直有一个问题,当我在键盘上输入一个键时,它一直返回键盘代码,例如,当我按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);
  }
bvjxkvbb

bvjxkvbb1#

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);
        }
    }
});
omqzjyyz

omqzjyyz2#

使用 char numassignMove 方法而不是 int num . 因为你的 num 参数是 int ,的 char 正在传递的值将类型转换为 int 这将是ascii码。
样品:

void assignMove(int row, int col, char num)

相关问题