001 import data.*;
002 import sale.*;
003 import util.swing.*;
004
005 import java.awt.*;
006 import java.text.*;
007
008 import javax.swing.*;
009
010
011 /**
012 * Editor für die Geldbeträge in den Tabellen.
013 */
014 public class DMCellEditor extends DefaultCellEditor
015 {
016
017 //// attributes ////////////////////////////////////////////////////////////
018
019 private String[] result;
020
021
022 //// constructor ///////////////////////////////////////////////////////////
023
024 /**
025 * Erstellt ein neues Objekt der Klasse <CODE>DMCellEditor</CODE>.
026 */
027 public DMCellEditor (String[] result, String init)
028 {
029 super(new JTextInput(result, init));
030 this.result = result;
031 }
032
033
034 //// public methods ////////////////////////////////////////////////////////
035
036 /**
037 * Gibt die zum Editieren verwendete Komponente korrekt initialisiert
038 * zurück.
039 */
040 public Component getTableCellEditorComponent(JTable jTable,
041 Object value, boolean isSelected, int row, int column)
042 {
043 // die Komponente holen,
044 Component component =
045 super.getTableCellEditorComponent(jTable, value, isSelected, row, column);
046
047 // ...initialisieren
048 ((JTextInput)component).setText(((Currency)
049 Shop.getTheShop().getCatalog("DM")).toString((NumberValue)value));
050
051 // ...und zurueckgeben
052 return component;
053 }
054
055 /**
056 * Versucht, den eingegebenen Text als Geldbetrag zu interpretieren.
057 */
058 public Object getCellEditorValue()
059 {
060 // versuchen, den Text zu parsen und zurueckzugeben
061 try {
062 return ((Currency)Shop.getTheShop().getCatalog("DM")).parse(result[0]);
063 }
064 catch (ParseException pexc) {
065 // Text konnte nicht verarbeitet werden, 0 zurueckgeben
066 return new IntegerValue (0);
067 }
068 }
069
070 /**
071 * Versucht, das Editieren zu beenden und gibt eine Bewertung des
072 * Erfolges zurück.
073 */
074 public boolean stopCellEditing()
075 {
076 // versuchen den Text zu parsen
077 try {
078 ((Currency)Shop.getTheShop().getCatalog("DM")).parse(result [0]);
079 }
080 catch (ParseException pexc) {
081 // Text konnte nicht verarbeitet werden, editieren kann nicht
082 // beendet werden
083 return false;
084 }
085
086 // Editieren kann nach Maszgabe der Methode der Oberklasse beendet werden
087 return super.stopCellEditing();
088 }
089 }