Package com.solfin.tools

Source Code of com.solfin.tools.DegreesEditor

/*
*  DegreesEditor.java
*
*  Created on December 10, 2005, 4:39 PM
*
*  $Id: DegreesEditor.java 4 2006-08-21 13:04:48Z gabriel $
*
*
*     The contents of this file are subject to the Mozilla Public License
*     Version 1.1 (the "License"); you may not use this file except in
*     compliance with the License. You may obtain a copy of the License at
*     http://www.mozilla.org/MPL/
*
*     Software distributed under the License is distributed on an "AS IS"
*     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
*     License for the specific language governing rights and limitations
*     under the License.
*
*     The Original Code is Viperfish.
*
*     The Initial Developer of the Original Code is Gabriel Galibourg.
*     Portions created by Gabriel Galibourg are Copyright (C) 2005-2006
*     Gabriel Galibourg. All Rights Reserved.
*
*     Contributor(s):
*
*/

package com.solfin.tools;

import java.text.NumberFormat;
import java.text.ParseException;


import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.Component;
import java.awt.Toolkit;


import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;
import javax.swing.text.MaskFormatter;




import javax.swing.AbstractCellEditor;
import javax.swing.table.TableCellEditor;

/**
*
* @author gabriel
*/
public class DegreesEditor extends DefaultCellEditor {
    JFormattedTextField ftf;
    //NumberFormat integerFormat;
    private Double minimum, maximum;
    private String pmStr; // Plus Minus string
    private boolean DEBUG = false;
   
    public DegreesEditor() {
        this(0, 90, "+-");
    }
   
    public DegreesEditor(double min, double max, String pmStr) {
        super(new JFormattedTextField());
        ftf = (JFormattedTextField)getComponent();
        minimum = new Double(min);
        maximum = new Double(max);
        this.pmStr = pmStr;
       
        //Set up the editor for the cells.
        MaskFormatter formatter=null;
        try {
            formatter = new MaskFormatter("###�##.#### *");
        } catch (java.text.ParseException exc) {
            System.err.println("formatter is bad: " + exc.getMessage());
            System.exit(-1);
        }
//        integerFormat = NumberFormat.getIntegerInstance();
//        NumberFormatter intFormatter = new NumberFormatter(integerFormat);
//        intFormatter.setFormat(integerFormat);
//        intFormatter.setMinimum(minimum);
//        intFormatter.setMaximum(maximum);
       
       
        ftf.setFormatterFactory(
                new DefaultFormatterFactory(formatter));
        //ftf.setValue(minimum);
        ftf.setHorizontalAlignment(JTextField.TRAILING);
        ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);
       
        //React when the user presses Enter while the editor is
        //active.  (Tab is handled as specified by
        //JFormattedTextField's focusLostBehavior property.)
        ftf.getInputMap().put(KeyStroke.getKeyStroke(
                KeyEvent.VK_ENTER, 0),
                "check");
        ftf.getActionMap().put("check", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                if (!ftf.isEditValid()) { //The text is invalid.
                    if (userSaysRevert()) { //reverted
                        ftf.postActionEvent(); //inform the editor
                    }
                } else try {              //The text is valid,
                    ftf.commitEdit();     //so use it.
                    ftf.postActionEvent(); //stop editing
                } catch (java.text.ParseException exc) { }
            }
        });
    }
   
    //Override to invoke setValue on the formatted text field.
    public Component getTableCellEditorComponent(JTable table,
            Object value, boolean isSelected,
            int row, int column) {
        System.err.println("value-"+value);
        JFormattedTextField ftf =
                (JFormattedTextField)super.getTableCellEditorComponent(
                table, value.toString(), isSelected, row, column);
        ftf.setValue(value.toString());
        return ftf;
    }
   
    //Override to ensure that the value remains an Integer.
    public Object getCellEditorValue() {
        JFormattedTextField ftf = (JFormattedTextField)getComponent();
        Object o = ftf.getValue();
        if (o instanceof Degrees) {
            return o;
        } else if (o instanceof Number) {
            return new Double(((Number)o).doubleValue());
        } else {
            if (DEBUG) {
                System.out.println("getCellEditorValue: o isn't a Number");
            }
            return new Degrees(o.toString(), pmStr);
        }
    }
   
    //Override to check whether the edit is valid,
    //setting the value if it is and complaining if
    //it isn't.  If it's OK for the editor to go
    //away, we need to invoke the superclass's version
    //of this method so that everything gets cleaned up.
    public boolean stopCellEditing() {
        JFormattedTextField ftf = (JFormattedTextField)getComponent();
        if (ftf.isEditValid()) {
            try {
                ftf.commitEdit();
            } catch (java.text.ParseException exc) { }
           
        } else { //text is invalid
            if (!userSaysRevert()) { //user wants to edit
                return false; //don't let the editor go away
            }
        }
        return super.stopCellEditing();
    }
   
    /**
     * Lets the user know that the text they entered is
     * bad. Returns true if the user elects to revert to
     * the last good value.  Otherwise, returns false,
     * indicating that the user wants to continue editing.
     */
    protected boolean userSaysRevert() {
        Toolkit.getDefaultToolkit().beep();
        ftf.selectAll();
        Object[] options = {"Edit",
                "Revert"};
                int answer = JOptionPane.showOptionDialog(
                        SwingUtilities.getWindowAncestor(ftf),
                        "BOO The value must be an integer between "
                        + minimum + " and "
                        + maximum + ".\n"
                        + "You can either continue editing "
                        + "or revert to the last valid value.",
                        "Invalid Text Entered",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.ERROR_MESSAGE,
                        null,
                        options,
                        options[1]);
               
                if (answer == 1) { //Revert!
                    ftf.setValue(ftf.getValue());
                    return true;
                }
                return false;
    }
}
TOP

Related Classes of com.solfin.tools.DegreesEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.