So validieren Sie JTable-Zelleneingaben auf ungültige Werte
Beim Definieren des Klassentyps einer JTable-Spalte als bestimmte Zahlenunterklasse lehnt Swing den Benutzer automatisch ab Eingabe, die nicht zum Typ passt. Wenn die Spalte beispielsweise als Integer.class definiert ist, werden doppelte Werte abgelehnt.
Um den gleichen Effekt für nicht positive Werte zu erzielen, kann die setValueAt-Methode im Tabellenmodell überschrieben werden. Dieser Ansatz allein liefert dem Benutzer jedoch kein visuelles Feedback.
Eine umfassendere Lösung beinhaltet die Verwendung eines benutzerdefinierten Zelleneditors. Ein solcher Editor ist der PositiveIntegerCellEditor, der DefaultCellEditor erweitert und die stopCellEditing-Methode überschreibt, um nach negativen oder Nullwerten zu suchen. Wenn ein ungültiger Wert erkannt wird, setzt der Editor den Rand der Zelle auf Rot und bricht den Bearbeitungsvorgang ab.
<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>
Um diesen Editor zu verwenden, kann der Zelleneditor der Tabellenspalte mit dem folgenden Code eingestellt werden:
<code class="java">table.getColumnModel().getColumn(columnIndex).setCellEditor(new PositiveIntegerCellEditor(new JTextField()));</code>
Das obige ist der detaillierte Inhalt vonWie validiere ich die JTable-Zelleneingabe auf nicht positive Ganzzahlwerte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!