import javax.swing.JTextArea;
import java.awt.Component;
import java.util.EventObject;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.event.CellEditorListener;
import java.util.Vector;
import javax.swing.event.ChangeEvent;
public class JTextAreaEditor extends JTextArea implements TableCellEditor
{
private Vector listeners = new Vector();
public JTextAreaEditor()
{
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column)
{
setLineWrap(true);
setWrapStyleWord(true);
return this;
}
// Gibt an, ob die Zelle editierbar ist. Das EventObject kann
// ein MouseEvent, ein KeyEvent oder sonst was sein.
public boolean isCellEditable(EventObject anEvent)
{
return true;
}
// Gibt an, ob die Editor-Component selektiert werden muss, um
// sie zu benutzen. Diese Editor soll immer selektiert werden,
// deshalb wird hier true zurückgegeben
public boolean shouldSelectCell(EventObject anEvent)
{
return true;
}
// Gibt den aktuellen Wert des Editors zurück.
public Object getCellEditorValue()
{
return this;
}
// Bricht das editieren der Zelle ab
public void cancelCellEditing()
{
fireEditingCanceld();
}
// Stoppt das editieren der Zelle, sofern möglich.
// Da der JSpinner immer einen gültigen Wert anzeigt, kann auch
// jederzeit gestoppt werden (return-Wert = true)
public boolean stopCellEditing()
{
fireEditingStopped();
return true;
}
// Benachrichtig alle Listener, dass das Editieren abgebrochen wurde
protected void fireEditingCanceld()
{
ChangeEvent e = new ChangeEvent( this );
for( int i = 0, n = listeners.size(); i<n; i++ )
((CellEditorListener)listeners.get( i )).editingCanceled( e );
}
// Benachrichtig alle Listener, dass das Editieren beendet wurde
protected void fireEditingStopped()
{
ChangeEvent e = new ChangeEvent( this );
for( int i = 0, n = listeners.size(); i<n; i++ )
((CellEditorListener)listeners.get( i )).editingStopped( e );
}
// Möglicherweise möchte jemand über Ereignisse des Editors
// informiert werden
public void addCellEditorListener(CellEditorListener l)
{
listeners.add( l );
}
// Ein CellEditorListener entfernen
public void removeCellEditorListener(CellEditorListener l)
{
listeners.remove( l );
}
}