当前位置: 首页 > 面试题库 >

JTextField清除后停止使用MaskFormatter

景同
2023-03-14
问题内容

我正在做一个数独求解器,为此,我希望我的JTextFields只接受数字123456789中的一个作为有效输入。因此,我将MaskFormatter与JFormattedTextField一起使用。但是,当我通过执行.setText(“”)清除所有TextField时,MaskFormatter不再起作用。清除文本框后,我可以再次在其中写入任何内容。为什么以及如何解决?

我的代码基本上是:

MaskFormatter formatter = new MaskFormatter("#");
formatter.setValidCharacters("123456789");
Font textFieldFont = new Font("Verdana", Font.BOLD, 30);
for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        southPanel.setBorder(lineBorder);
        field[i][j] = new JFormattedTextField(formatter);
        field[i][j].setHorizontalAlignment(JTextField.CENTER);
        field[i][j].setFont(textFieldFont);
        southPanel.add(field[i][j]);
    }
}

然后,当我清除它:

for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        field[i][j].setText("");
    }
}

编辑:这是所有代码,还没有编写大部分代码,因为我的朋友做到了。我现在要接管一下GUI的修复工作。

http://dl.dropbox.com/u/4018313/SudokuSolver.zip

另外,经过更多测试之后,似乎清除了所有框之后,您可以键入很多不应该在其中的字符,但是当您单击另一个字段时,所有字符都将消失。然后,如果您单击其他框,则会显示您先前写的数字。

不要弄这个!


问题答案:

我无法告诉您确切的原因,但setText似乎让您JFormattedTextField发疯了,因为它""是一个字符串,并且与当前掩码相反。

请尝试setValue(null)改用。

我只是确保此方法有效。下一段代码证明了这一点:

public class Two extends JFrame {

    public static void main(String[] args) throws Exception {
        new Two().a();
    }

    void a() throws Exception {
        this.setLayout(new GridLayout(2, 1));
        MaskFormatter formatter = new MaskFormatter("#");
        formatter.setValidCharacters("123456789");
        final JFormattedTextField field = new JFormattedTextField(formatter);
        JButton b = new JButton("null!");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                field.setValue(null);
            }
        });
        this.add(field);
        this.add(b);
        this.setSize(100, 100);
        this.setVisible(true);
    }
}

单击 空后! 按钮格式化程序将继续正常工作。



 类似资料:
  • 我有一个文本字段,当用户插入一定数量的字符时,程序应该将其放入JTable并清除文本字段,但它会为

  • 问题内容: 当鼠标单击该文本字段时,我需要使该程序清除文本字段中的文本。我已经尝试了一些方法,但是还没有一个对我有用。 这是完整的代码: 问题答案: TL; DR 无论如何,注册和替代对我有用, 我希望这个例子能使您正确地开始!

  • 问题内容: 我正在制作一个演示,其中我将使用固定时间间隔从服务器上获取数据,现在我需要停止/取消此操作。 我该如何实现?如果需要重新启动该过程,该怎么办? 其次,我还有一个问题:经过规定的时间间隔后,我正在从服务器获取数据。有需要使用还是? 这是我的朋克: http://plnkr.co/edit/ly43m5?p=preview 问题答案: 您可以存储间隔返回的承诺并用于该承诺,这将取消该承诺的

  • 我有一个使用javax.swing和java.awt的图形用户界面,请求焦点是保持文本字段的焦点,这样用户就可以从键盘开始。然后,我为每个整数0-9添加了按钮,以及一个清晰的字段按钮。然而,现在的焦点总是从按钮开始。 当我单击一个按钮时,焦点仍然返回到文本字段,或者如果我启动焦点,它仍然保留在文本字段中,我如何解决这个问题,并在每次窗口打开时将焦点放在文本字段上? 数字按钮示例 文本字段代码 检查

  • 问题内容: 停止在JTextField中键入后如何启动函数。并非每个关键版本。如果两个键的释放时间差大于1秒,则它将运行此功能。否则,请等待1秒钟。 问题答案: 使用Swing 和a 每次更新时,重置 看看如何使用Swing计时器和侦听文档中的更改以了解更多详细信息 作为一个简单的例子…

  • 问题内容: 是否可以使用jQuery 清除控件值?我尝试了以下方法: 但这不起作用。 问题答案: 简易:将元素包裹起来,在表单上调用reset,然后使用删除表单。与该线程中不同的解决方案不同,你最终得到的是同一元素(包括在其上设置的自定义属性)。 经过测试并可以在Opera,Firefox,Safari,Chrome和IE6 +中运行。也适用于其他类型的表单元素,但除外。 JSFiddle 如下面