Heim  >  Artikel  >  Java  >  Wie validiere ich nicht positive Ganzzahleingaben in JTable-Zellen?

Wie validiere ich nicht positive Ganzzahleingaben in JTable-Zellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 07:08:29904Durchsuche

How to Validate Non-Positive Integer Input in JTable Cells?

Ungültige Eingabevalidierung in JTable-Zellen

Frage:

Betrachten Sie eine JTable mit einer Spalte Der Klassentyp wird mithilfe der Methode getColumnClass() als Ganzzahl angegeben. Swing markiert und lehnt ungültige Eingaben (z. B. doppelte Werte) automatisch ab. Allerdings ist eine benutzerdefinierte Validierung für nicht positive Ganzzahleingaben (negativ oder Null) erwünscht, die das Standardverhalten für ungültige Ganzzahleingaben nachahmt.

Antwort:

Im Gegensatz zu Swing Bei Standardprüfungen, die Selbstprüfung zum Erkennen von Ausnahmen verwenden, kann ein benutzerdefinierter Editor für spezifische Validierungen eingesetzt werden. Beispielsweise kann PositiveIntegerCellEditor als Unterklasse von DefaultCellEditor erstellt werden, um die Aufgabe zu erfüllen.

In der Methode stopCellEditing() wird versucht, die Eingabe in eine Ganzzahl umzuwandeln. Wenn der Wert nicht positiv ist, wird eine NumberFormatException ausgelöst, die dazu führt, dass das textField rot umrandet wird, was auf eine ungültige Eingabe hinweist.

<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>

Wenn auf eine Zelle mit einer ungültigen Eingabe geklickt wird, wird der PositiveIntegerCellEditor angezeigt aktiviert, und beim Verlassen des Bearbeitungsmodus (z. B. durch Drücken der Eingabetaste oder der Tabulatortaste) versucht die Methode stopCellEditing(), die Eingabe zu konvertieren. Wenn die Konvertierung fehlschlägt (d. h. die Eingabe ist nicht positiv), wird der textField-Rahmen auf Rot gesetzt und der Fokus bleibt auf der Zelle.

Das obige ist der detaillierte Inhalt vonWie validiere ich nicht positive Ganzzahleingaben in JTable-Zellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn