首页  >  文章  >  Java  >  如何验证 JTable 单元格输入的非正整数值?

如何验证 JTable 单元格输入的非正整数值?

DDD
DDD原创
2024-10-26 13:35:02565浏览

How to Validate JTable Cell Input for Non-Positive Integer Values?

如何验证 JTable 单元格输入是否存在无效值

将 JTable 列的类类型定义为特定数字子类时,Swing 会自动拒绝用户输入不符合类型。例如,如果列定义为 Integer.class,则会拒绝 double 值。

要对非正值实现相同的效果,可以在表模型中重写 setValueAt 方法。然而,这种方法本身并不能向用户提供视觉反馈。

更完整的解决方案涉及使用自定义单元格编辑器。 PositiveIntegerCellEditor 就是这样的编辑器之一,它扩展了 DefaultCellEditor 并重写 stopCellEditing 方法来检查负值或零值。如果检测到无效值,编辑器会将单元格的边框设置为红色并取消编辑过程。

<code class="java">private static class PositiveIntegerCellEditor extends DefaultCellEditor {

    private static final Border red = new LineBorder(Color.red);
    private static final Border black = new LineBorder(Color.black);
    private JTextField textField;

    public PositiveIntegerCellEditor(JTextField textField) {
        super(textField);
        this.textField = textField;
        this.textField.setHorizontalAlignment(JTextField.RIGHT);
    }

    @Override
    public boolean stopCellEditing() {
        try {
            int v = Integer.valueOf(textField.getText());
            if (v < 0) {
                throw new NumberFormatException();
            }
        } catch (NumberFormatException e) {
            textField.setBorder(red);
            return false;
        }
        return super.stopCellEditing();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
        Object value, boolean isSelected, int row, int column) {
        textField.setBorder(black);
        return super.getTableCellEditorComponent(
            table, value, isSelected, row, column);
    }
}</code>

要使用此编辑器,可以使用以下代码设置表格列的单元格编辑器:

<code class="java">table.getColumnModel().getColumn(columnIndex).setCellEditor(new PositiveIntegerCellEditor(new JTextField()));</code>

以上是如何验证 JTable 单元格输入的非正整数值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn