Nicht ganz trivial
Original geschrieben von philbo
Hallo mal wieder...
könntet ihr mir nochmal helfen?
Also, ich habe eine JTable, die als tablemodel ein selbst geschriebenes tablemodel hat (das wiederum erbt von defaulttablemodel).
Nun möchte ich z.b. für Spalte 1 festlegen, dass maximal 20 Zeichen eingegeben werden können, für Spalte 2 100 usw.. Das geht doch bestimmt irgendwie recht einfach, oder?!
Gruß
Philipp
Das ist nicht ganz trivial und umständlich, wenn Du für jede Spalte andere Eingaben erlauben möchtest.
Folgende Vorgehensweise:
1. Du benötigst einen eigenen (Default)CellEditor
2. Darin muss eine Methode aus dem Interface implementiert werden:
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
3. Achte darauf, dass Du als Component ein JTextField zurückgibst.
4. Diesem JTextField wird ein Document zugewiesen, z.B.
private Document normalesDocument = new MyDocument();
myTextField.setDocument(normalesDocument);
return myTextField;
5. Dieses MyDocument (extends PlainDocument) prüft die eigentliche Eingabe mit der Methode
public void insertString(int offset, String s, AttributeSet attributeSet)
throws BadLocationException
6. Darin kannst Du nun die Eingabe einschränken.
7. Den anfangs angelegten CellEditor weist Du nun entweder der ganzen Tabellen zu
Code:
MyCellEditor cellEditor = new MyCellEditor();
myTable.setDefaultEditor(Object.class, cellEditor);
oder nur einzelnen Klassen:
myTable.setDefaultEditor(Integer.class, cellEditor);
Für letzteres ist im TableModel eine Methode getColumnClass(int i) zu implementieren. Anhand dessen orientiert sich die Tabelle auch, welcher Editor zu öffnen ist, falls kein eigener definiert wurde. Setz mal testweise eine ColumnClass auf Boolean.class, und Du wirst eine CheckBox zu sehen bekommen...
Mit dieser Vorgehensweise können natürlich noch ganz andere Einschränkungen bei der Eingabe vorgenommen werden, z.B. nur negative Zahlen, nur positive, mit Komma, ohne Komma, Zahlen-Buchstabenkombinationen usw. usw.