为了账号安全,请及时绑定邮箱和手机立即绑定

未正确清除JFormattedTextField

未正确清除JFormattedTextField

慕沐林林 2019-07-04 18:02:54
未正确清除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的大小,使它是正方形的,并且不能强制每个文本框只有一个整数。我错过了什么很明显的东西吗?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

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

因此,由于我使用的是MaskFormat,所以我无法清除该字段。


查看完整回答
反对 回复 2019-07-04
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

虽然不是相同的问题,但我搜索了(太多)像这样的问题。在我的例子中,我希望能够填充另外两个字段(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);
            }
        }
    }}


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 498 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号