Java 我正在为我的数独游戏实现focus listener,但它不起作用

Java 我正在为我的数独游戏实现focus listener,但它不起作用,java,Java,如果用户在我的数独板上输入任何字母,在他将该字母更改为数字之前,它将不允许进入其他单元格。如果他按tab键,也不会移动。如果他使用鼠标,也不会进入其他单元格,直到他更改该字母。如果字母输入消息,则不允许显示字母。我对消息进行编码显示三次并重复。如何避免这种情况。我想显示一次消息,直到用户更改字母表,焦点仅放在当前输入的字母表单元格上 代码: 可以使用e.getSource获取触发焦点事件的单元格。 仅对该单元格进行检查,这样即使其他单元格不包含数值,消息也只显示一次 此外,为了能够从单元格中获取

如果用户在我的数独板上输入任何字母,在他将该字母更改为数字之前,它将不允许进入其他单元格。如果他按tab键,也不会移动。如果他使用鼠标,也不会进入其他单元格,直到他更改该字母。如果字母输入消息,则不允许显示字母。我对消息进行编码显示三次并重复。如何避免这种情况。我想显示一次消息,直到用户更改字母表,焦点仅放在当前输入的字母表单元格上

代码:

可以使用e.getSource获取触发焦点事件的单元格。 仅对该单元格进行检查,这样即使其他单元格不包含数值,消息也只显示一次

此外,为了能够从单元格中获取文本,您必须将e.getSource返回的对象强制转换为JTextField。 例如: JTextField cell=JTextField e.getSource


在else条件下,您正在验证数字,您正在请求焦点,然后显示消息框。因此,它显然会触发lostFocus事件

尝试将代码交换为:

else if (!value.matches("[1-9]+"))
{  
cell[i][j].setBackground(Color.red);     
JOptionPane.showMessageDialog(getParent(),"Alphabetsare not allowed");
cell[i][j].requestFocus();  
}  

您是连续三次收到消息框还是连续收到消息框?我想它应该是连续的。如何终止我不能这么做。请告诉我如何终止你是如何运行你的程序的?我也试过了。同样的问题也遇到了。我这样运行,我会设置一些谜题,然后我会去某个单元格,输入alphbaet,然后按tab键,它会显示不允许重复的字母。之后如何要检查该单元格中是字母还是数字,以及如何设置焦点和消息,直到用户更改为止,该字母仍在重复。如果我在单元格中输入任何字母,则会显示一条消息,不允许使用字母。但当我用鼠标单击空单元格时,会出现红色并显示消息2times@REDDY我编辑了我的答案,现在,仅当其中的单元格字符不是数字时,才会显示消息。
@Override
public void focusLost(FocusEvent e) {   
   JTextField cell = (JTextField) e.getSource();
   String value = cell.getText();
   if(!value.matches("\\d+") && value.length() > 0){
      cell.setText("");
      cell.setBackground(Color.red);     
      cell.requestFocus();
      JOptionPane.showMessageDialog(getParent(),"Alphabetsare not allowed");
   }else{
      cell.setBackground(Color.WHITE);   
   }
}    
else if (!value.matches("[1-9]+"))
{  
cell[i][j].setBackground(Color.red);     
JOptionPane.showMessageDialog(getParent(),"Alphabetsare not allowed");
cell[i][j].requestFocus();  
}