Wie mark JTable cell Eingabe als ungültig?
Wenn ich eine JTable
und eine Spalte angeben, die classtype auf es ist das Modell wie folgt:
DefaultTableModel model = new DefaultTableModel(columnNames, 100) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Integer.class;
}};
Dann, wenn ein Benutzer versucht, geben Sie eine double
Wert in der Tabelle, Schwingen automatisch die Eingabe ablehnt, und setzt die Zelle Umriss in rot.
Möchte ich den gleichen Effekt auftreten, wenn jemand in einen 'negativen oder 0' Eingang in die Zelle. Ich habe diese:
@Override
public void setValueAt(Object val, int rowIndex, int columnIndex) {
if (val instanceof Number && ((Number) val).doubleValue() > 0) {
super.setValueAt(val, rowIndex, columnIndex);
}
}
}
Dies verhindert, dass die Zelle, von der Annahme alle nicht-positiven Werte, aber es doens T legen Sie die Farbe rot und lassen Sie die Zelle, die als bearbeitbar.
Habe ich versucht zu erforschen, wie JTable tut die Ablehnung standardmäßig, aber ich kann nicht scheinen, um es zu finden.
Wie kann ich es ablehnen, das nicht-positive input auf die gleiche Weise, die es ablehnt, die nicht-Integer-Eingang?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
private static class JTable.GenericEditor
verwendet Introspektion Ausnahmen zu fangen, indem er bestimmteNumber
Unterklassen mit ungültigenString
Werte. Wenn Sie nicht brauchen, solche generische Verhalten, sollten SiePositiveIntegerCellEditor
als Unterklasse vonDefaultCellEditor
. IhrestopCellEditing()
Methode wäre dementsprechend einfacher.Nachtrag: Aktualisiert
RIGHT
Ausrichtung und häufige Fehler-code.Nachtrag: Siehe auch die Mit einem Editor zu Validieren Sie vom Benutzer Eingegebene Text.
AbstractTableModel
imsetValueAt(row,column)
können Sie überprüfen, wenn es ist ein business Logik, aber dann verlieren Sie PIEPEN roten Kasten 😛Habe ich es herausgefunden. Überschreiben Sie die DefaultCellEditor und zurück
false
/set der Grenze zu rot, wenn die angegebene Zahl ist nicht positiv.Leider, da JTable.GenericEditor ist
static
w/default
Rahmen, ich bin nicht in der Lage, zu überschreibenGenericEditor
um diese Funktionalität zu bieten und zu re-implementieren Sie w/ein paar Verbesserungen, es sei denn, jemand hat einen besseren Weg, dies zu tun, die würde ich gerne hören.Dieser code ist eine kleine Verbesserung der akzeptierten Antwort. Wenn die
Benutzer nicht einen beliebigen Wert eingeben, Klick auf eine andere Zelle sollte
ihm erlauben, wählen Sie eine andere Zelle. Die akzeptierte Lösung nicht
dieses zulassen.
Diese Lösung sucht nach leeren text. Im Falle eines leeren text, rufen wir die
stopCellEditing()
Methode.