/*
 * IntegerCellEditor.java
 *
 * Created on September 21, 2000, 3:09 PM
 */
package CITableTest;

import javax.swing.table.TableCellEditor;
import javax.swing.JTextField;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import java.awt.Component;

/** Table cell editor for java.lang.Byte and java.lang.Integer.
 *
 * @author  Somchai LIMSIRORATANA, Nuntiya LIMSIRORATANA(Yawai)
 * @version 1.1
 */
public class NumberCellEditor extends AbstractCellEditor implements TableCellEditor {

    protected JTextField textField;
    protected Object oldValue;
    /** Creates new IntegerCellEditor */
    public NumberCellEditor() {
        textField = new JTextField();
        textField.addActionListener(this);
        textField.setEditable(true);
        textField.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    /** Sets an initial <I>value</I> for the editor.  This will cause
     * the editor to stopEditing and lose any partially edited value
     * if the editor is editing when this method is called. <p>
     *
     * Returns the component that should be added to the client's
     * Component hierarchy.  Once installed in the client's hierarchy
     * this component will then be able to draw and receive user input.
     *
     * @param   table       the JTable that is asking the editor to edit
     *              This parameter can be null.
     * @param   value       the value of the cell to be edited.  It is
     *              up to the specific editor to interpret
     *              and draw the value.  eg. if value is the
     *              String "true", it could be rendered as a
     *              string or it could be rendered as a check
     *              box that is checked.  null is a valid value.
     * @param   isSelected  true is the cell is to be renderer with
     *              selection highlighting
     * @param   row         the row of the cell being edited
     * @param   column      the column of the cell being edited
     * @return  the component for editing
     */
    public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column) {
        textField.setText(value.toString());
        oldValue = value;
        return textField;
    }
    /** Returns the value contained in the editor */
    public Object getCellEditorValue() {
        String name = oldValue.getClass().getName();
        Object returnValue=null;
        try {
            if (name.equals("java.lang.Integer"))
                returnValue = new java.lang.Integer(textField.getText());
            else if (name.equals("java.lang.Double"))
                returnValue = new java.lang.Double(textField.getText());
            else if (name.equals("java.lang.Float"))
                returnValue = new java.lang.Float(textField.getText());
            else if (name.equals("java.lang.Long"))
                returnValue = new java.lang.Long(textField.getText());
            else if (name.equals("java.lang.Short"))
                returnValue = new java.lang.Short(textField.getText());
            else if (name.equals("java.lang.Byte"))
                returnValue = new java.lang.Byte(textField.getText());
            else if (name.equals("java.math.BigDecimal"))
                returnValue = new java.math.BigDecimal(textField.getText());
            else if (name.equals("java.math.BigInteger"))
                returnValue = new java.math.BigInteger(textField.getText());
        } catch (NumberFormatException e) {}
        return returnValue;
    }
}