Hallo,
ich möchte gerne eine JTable erstellen, in deren Zellen nur Dezimalzahlen (also alle Ziffern und der Punkt) sowie das Minuszeichen und das Zeichen für "unendlich" stehen dürfen.
Mein CellRenderer erbt dabei von JTextField.
Meine Schwierigkeit ist folgende: Bei einem normalen JTextField kann ich über die Methode .setDocument einen eigenen Ableger der PlainDocument-Klasse angeben. In dieser Klasse habe ich die Methode insertString so überschrieben, dass nur die zulässigen Zeichen akzeptiert werden. Der Benutzer kann dann gar keine anderen Zeichen eingeben.
Wenn ich dieselbe eigene PlainDocument-Tochterklasse aber im Konstruktor meines CellRenderers setze, funktioniert es nicht: Der Benutzer kann in der Tabellenzelle eingeben, was er will.
Wie kann ich die Zelle dazu bewegen, nur die erlaubten Zeichen anzunehmen?
Vielen Dank!
ich möchte gerne eine JTable erstellen, in deren Zellen nur Dezimalzahlen (also alle Ziffern und der Punkt) sowie das Minuszeichen und das Zeichen für "unendlich" stehen dürfen.
Mein CellRenderer erbt dabei von JTextField.
Meine Schwierigkeit ist folgende: Bei einem normalen JTextField kann ich über die Methode .setDocument einen eigenen Ableger der PlainDocument-Klasse angeben. In dieser Klasse habe ich die Methode insertString so überschrieben, dass nur die zulässigen Zeichen akzeptiert werden. Der Benutzer kann dann gar keine anderen Zeichen eingeben.
Wenn ich dieselbe eigene PlainDocument-Tochterklasse aber im Konstruktor meines CellRenderers setze, funktioniert es nicht: Der Benutzer kann in der Tabellenzelle eingeben, was er will.
Java:
public class DependencyCellRenderer extends JTextField implements TableCellRenderer
{
public DependencyCellRenderer()
{
super();
this.setDocument(new PlainDocument() {
public void insertString(int offset, String str, AttributeSet a)
throws BadLocationException {
if (str.matches(".*[0|1|2|3|4|5|6|7|8|9|-|,|∞].*"))
{
super.insertString(offset, str, a);
}
return;
}
});
}
public Component getTableCellRendererComponent(
JTable table, Object content,
boolean isSelected, boolean hasFocus,
int row, int column) {
// (...)
return this;
}
}
Wie kann ich die Zelle dazu bewegen, nur die erlaubten Zeichen anzunehmen?
Vielen Dank!