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中文网其他相关文章!