Bei JTable die Anzahl einzugebener Zeichen festlegen

so ganz klappt es leider immernoch nicht :-/

Ich hoffe ich muss dich jetzt ein allerletztes Mal nerven...
also so ganz klappt es noch nicht. In alle Spalten kann die gleiche Länge eingegebn werden. Liegt das evtl daran, dass alles String.class sind, was ich vorher gar nicht gesehen hatte?
ich hab es in meinem Quelltext so aufgerufen:
Code:
JTextField tf1 = new JTextField();
JTextField tf2 = new JTextField();
JTextField tf3 = new JTextField();
JTextField tf4 = new JTextField();
MyCellEditor spalte3_Editor = new MyCellEditor(tf1,20);
mytable.setDefaultEditor(String.class, spalte3_Editor);
MyCellEditor spalte4_Editor = new MyCellEditor(tf2,100);
mytable.setDefaultEditor(String.class, spalte4_Editor);
MyCellEditor spalte5_Editor = new MyCellEditor(tf3,5);
mytable.setDefaultEditor(String.class, spalte5_Editor);
MyCellEditor spalte6_Editor = new MyCellEditor(tf4,5);
mytable.setDefaultEditor(String.class, spalte6_Editor);
und die getColumnClass sieht jetzt so aus:
Code:
public Class getColumnClass (int spalte) {
Class[] classTypes = {Integer.class,String.class, String.class, String.class,String.class,String.class, String.class, String.class}; 
return classTypes[spalte];}
Nur die erste Spalte hat keine String.class, aber die Spalte kann eh nicht bearbeitet werden.
 
Re: so ganz klappt es leider immernoch nicht :-/

Original geschrieben von philbo
Ich hoffe ich muss dich jetzt ein allerletztes Mal nerven...
also so ganz klappt es noch nicht. In alle Spalten kann die gleiche Länge eingegebn werden. Liegt das evtl daran, dass alles String.class sind, was ich vorher gar nicht gesehen hatte?
ich hab es in meinem Quelltext so aufgerufen:
Code:
MyCellEditor spalte3_Editor = new MyCellEditor(tf1,20);
mytable.setDefaultEditor(String.class, spalte3_Editor);
MyCellEditor spalte4_Editor = new MyCellEditor(tf2,100);
mytable.setDefaultEditor(String.class, spalte4_Editor);
MyCellEditor spalte5_Editor = new MyCellEditor(tf3,5);
mytable.setDefaultEditor(String.class, spalte5_Editor);
MyCellEditor spalte6_Editor = new MyCellEditor(tf4,5);
mytable.setDefaultEditor(String.class, spalte6_Editor);

Der Editor wird pro Klasse gesetzt. Woher soll die Tabelle also wissen, dass

mytable.setDefaultEditor(String.class, spalte4_Editor);

für eine andere Spalte (welche?) gelten soll als

mytable.setDefaultEditor(String.class, spalte5_Editor);

?

Es ist also für jeden individuellen Editor notfalls eine eigene (Dummy-)Klasse (z.B. MyDummy1) anzulegen, diese dann entsprechend in dem Array columnClasses aufzunehmen und so zu benutzen:
mytable.setDefaultEditor(MyDummy1.class, spalte5_Editor);

Dann wird für jede (!) Spalte der Klasse MyDummy1 der spalte5_Editor verwendet.
 
Okay, jetzt läuft alles, die Spalten haben die richtige Länge!
Das einzige ist jedoch, dass er sich irgendwo den Inhalt der Zelle merkt...wenn ich in eine Zelle etwas geschrieben hab und dann eine andere aus der Spalte anklicke, schreibt er denselben Inhalt dort hinein. Woran könnte das liegen? Und 2.: Wenn ich ne Spalte zum Ändern anklicke, wird der Inhalt sofort gelöscht, kann ich das auch irgendwie umgehen?
 
Original geschrieben von philbo
Okay, jetzt läuft alles, die Spalten haben die richtige Länge!
Das einzige ist jedoch, dass er sich irgendwo den Inhalt der Zelle merkt...wenn ich in eine Zelle etwas geschrieben hab und dann eine andere aus der Spalte anklicke, schreibt er denselben Inhalt dort hinein. Woran könnte das liegen?

Das JTextField merkt sich den Inhalt. Also musst Du an geeigneter Stelle im CellEditor bei public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)

m_textField.setText("");

einbauen, wenn das Feld leer sein soll, oder

m_textField.setText(value.toString());

Bei mir sehen die letzten Zeilen so aus:
Code:
		// damit beim Öffnen eines Editors in der gleichen Spalte nicht der Wert aus
		// dem letzten Editor aus der anderen Zeile voreingestellt ist:
		if ( value != null )
			m_textField.setText(value.toString());
		else
			m_textField.setText("");
		
		return m_textField;

Und 2.: Wenn ich ne Spalte zum Ändern anklicke, wird der Inhalt sofort gelöscht, kann ich das auch irgendwie umgehen?

Sollte mit obiger Änderung erledigt sein.
 
Dankeschön!

Super, jetzt klappt alles!
Hab vielen Dank dafür, dass du dir so viel Zeit genommen hast, um mir bei der Sache zu helfen, alleine hätte ich das niemals hinbekommen!
Das war aber echt ne schwere Geburt!
Die Rechnung bitte an die Firma, in der ich zur Zeit bin :)

Gruß
Philipp
 
Biddeschön

>Super, jetzt klappt alles!

Prima. :)

>Hab vielen Dank dafür, dass du dir so viel Zeit genommen hast, um mir bei der Sache zu helfen, alleine hätte ich das niemals hinbekommen!
>Das war aber echt ne schwere Geburt!

Wie ich anfangs schrieb, ist nicht ganz trivial. ;)
Dazu Deine noch mageren Java-Kenntnisse, und schon wird es zäh...

>Die Rechnung bitte an die Firma, in der ich zur Zeit bin :)
>Gruß
>Philipp

Ich glaube ich bin recht günstig, so um die 700 - 800 EUR pro Tag werde ich abgerechnet iirc. ;)
Also wo kann ich mich jetzt bewer.. äh die Rechnung schicken? ;)
 
Danke!

Auch von meiner seite ein herzliches Dankeschön für ein praktisch komplettes Walkthrough zum Thema CellEditor!
Hast mir sehr geholfen Snape.
 
Zurück