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    }