未正确清除JFormattedTextField

未正确清除JFormattedTextField

我正在做这个任务,做一个解决sudoku的程序。我有一个带有SudokuTextBox扩展JFormattedTextField的网格的面板。我有一个MaskForMatter,所以它每个文本框只接受一个整数。然后,在我的面板中,当一个键被重命名时,我就有了这个代码。

 public void keyReleased(KeyEvent e) {
  SudokuTextBox tb = (SudokuTextBox) e.getSource();
  int row = tb.getRow();
  int col = tb.getCol();
  int value = toInteger(tb.getText());
  //System.out.println(value);
  if(sudoku.isValid(row, col, value)) {
   sudoku.set(row, col, value);
  }
  else {
   sudoku.set(row, col, 0);
   tb.setText(null);
  }
  tb.setCaretPosition(0);
  sudoku.print();
 }

问题是,如果我在文本框中放置了一个有效值,然后返回并输入一个无效的值(根据sudoku的规则),文本框将被清除。但是,当我转发选项卡时,前面的有效值将显示在文本框中。我的sudokumatrix包含了输入的所有数字,所以它只在相应的文本框中清除了应该的值。

当我将“SudokuTextBox扩展了JFormattedTextField”改为“SudokuTextBox扩展了JTextField”时,事情变得更加混乱。但是我不能设置JTextField的大小,使它是正方形的,并且不能强制每个文本框只有一个整数。

我错过了什么很明显的东西吗?


慕沐林林
浏览 499回答 3
3回答

互换的青春

现在我发现,“掩码格式化程序的缺点之一是,在当前实现(Java 5)中,它不支持用户在任何时候离开字段后将字段还原为空白值(在任何用户输入之前字段的初始值)。”因此,由于我使用的是MaskFormat,所以我无法清除该字段。

30秒到达战场

虽然不是相同的问题,但我搜索了(太多)像这样的问题。在我的例子中,我希望能够填充另外两个字段(jtfStarePatReq和jtfStarePatFound,也就是JTextField),方法是直接查找索引,或者使用一些旋转器,然后创建一个字符串,然后查找字符串(好的,可能太模糊了,但我认为上下文已经足够了)。我想要的是,如果用户删除或清除了JFormattedTextField jftfStareOpsIndex中的值,那么其他两个字段也将被清除。我在JFormattedTextField上使用了.isempty()方法来决定是使用该字段还是使用较长的计算搜索方法。所以我需要它是空的,如果有人从查找他们自己的索引到让软件搜索索引。不管怎么说,我试着捕获CommitEdit()异常,并将值设置为NULL,它似乎就能做到这一点。public class stareOpsIndexListener extends KeyAdapter implements FocusListener {     public void focusGained(FocusEvent e) {     }     public void focusLost(FocusEvent e) {         try {             JFormattedTextField jftf = (JFormattedTextField) e.getComponent();             jftf.commitEdit();             updateStareOpsIndex(jftf);         } catch (ParseException ex) {                 jtfStarePatReq.setText("");                 jtfStarePatFound.setText("");                 jftfStareOpsIndex.setValue(null);         }     }     public void keyPressed(KeyEvent e) {         int key = e.getKeyCode();         if (key == KeyEvent.VK_ENTER) {             try {                 JFormattedTextField jftf = (JFormattedTextField) e.getComponent();                 jftf.commitEdit();                 updateStareOpsIndex(jftf);             } catch (ParseException ex) {                 jtfStarePatReq.setText("");                 jtfStarePatFound.setText("");                 jftfStareOpsIndex.setValue(null);             }         }     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java