首页 > Java > java教程 > 为什么我的 JFormattedTextField 在数独解算器中无法正确清除?

为什么我的 JFormattedTextField 在数独解算器中无法正确清除?

DDD
发布: 2024-12-06 21:15:13
原创
662 人浏览过

Why Doesn't My JFormattedTextField Clear Properly in a Sudoku Solver?

JFormattedTextField 未正确清除

问题陈述:

在数独求解器应用程序中,当输入无效值时,用于显示每个单元格值的文本框不会正确清除。即使将无效值设置为 0 后,向前移动时也会重新出现之前的有效值。

问题分析:

问题似乎是由“SudokuTextBox”的赋值引起的扩展 JFormattedTextField。”这会为每个 TextBox 生成一个 JFormattedTextField,它强制执行特定的格式化规则和验证。对于数独,仅允许单个整数值。

潜在解决方案:

克服此限制并允许自定义验证,同时仍保持所需的正方形形状和单个整数输入限制,建议使用扩展 JPanel 的自定义组件或其他更合适的容器。这种方法可以更好地控制输入处理。

下面是一个自定义组件的示例,它模仿具有增强输入处理功能的 JFormattedTextField 的行为:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SudokuTextBox extends JPanel {

    private JTextField textField;

    public SudokuTextBox() {
        textField = new JTextField();
        textField.setHorizontalAlignment(JTextField.CENTER);
        textField.setInputVerifier(new InputVerifier() {
            @Override
            public boolean verify(JComponent input) {
                String text = ((JTextField) input).getText();
                return text.matches("[1-9]");
            }
        });

        this.add(textField, BorderLayout.CENTER);
        this.setPreferredSize(new Dimension(32, 32));
    }

    public String getText() {
        return textField.getText();
    }

    public void setText(String text) {
        textField.setText(text);
    }
}
登录后复制

此自定义组件强制验证使用 InputVerifier 的单整数输入。它还保留了正方形和居中的文本字段来模拟 JFormattedTextField 的外观,同时允许灵活的输入处理。

以上是为什么我的 JFormattedTextField 在数独解算器中无法正确清除?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板