首頁 >Java >java教程 >如何驗證 JTable 儲存格輸入的非正整數值?

如何驗證 JTable 儲存格輸入的非正整數值?

DDD
DDD原創
2024-10-26 13:35:02638瀏覽

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