Package charva.awt.util

Source Code of charva.awt.util.DateEntryField

/* class DateEntryField
*
* Copyright (C) 2001  R M Pitman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package charva.awt.util;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

import charva.awt.Component;
import charva.awt.Dialog;
import charva.awt.FlowLayout;
import charva.awt.Frame;
import charva.awt.Toolkit;
import charva.awt.event.FocusEvent;
import charva.awt.event.FocusListener;
import charva.awt.event.KeyEvent;
import charva.awt.event.KeyListener;
import charvax.swing.JLabel;
import charvax.swing.JOptionPane;
import charvax.swing.JPanel;
import charvax.swing.JTextField;

/**
* This class displays a date entry field in the format CCYY/MM/DD and allows
* the user to edit the contents of the three subfields. It intercepts each
* keystroke and causes a beep if a non-numeric key is typed.
*/
public class DateEntryField extends JPanel implements KeyListener,
        FocusListener {

    public DateEntryField(Frame owner_) {
        this(owner_, TimeZone.getDefault());
    }

    public DateEntryField(Frame owner_, TimeZone zone_) {
        //_owner = owner_;
        init(zone_);
    }

    public DateEntryField(Dialog owner_) {
        this(owner_, TimeZone.getDefault());
    }

    public DateEntryField(Dialog owner_, TimeZone zone_) {
        //_owner = owner_;
        init(zone_);
    }

    private void init(TimeZone zone_) {
        setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));

        _cal = new GregorianCalendar(zone_);

        add(_yearField);
        _yearField.addKeyListener(this);
        _yearField.addFocusListener(this);
        add(new JLabel("/"));
        add(_monthField);
        _monthField.addKeyListener(this);
        _monthField.addFocusListener(this);
        add(new JLabel("/"));
        add(_dayField);
        _dayField.addKeyListener(this);
        _dayField.addFocusListener(this);
    }

    public void keyPressed(KeyEvent e_) {
        /*
         * Allow non-printing keys to be processed by the superclass.
         */
        return; // pass the event on to its destination.
    }

    /**
     * This is never called.
     */
    public void keyReleased(KeyEvent e_) {
    }

    public void keyTyped(KeyEvent e_) {
        int key = e_.getKeyCode();

        /*
         * If the key is non-numeric, ring the bell and "consume" the keystroke
         * so that it doesn't get echoed.
         */
        if (key < '0' || key > '9') {
            Toolkit.getDefaultToolkit().beep();
            e_.consume();
        }

        Component source = (Component) e_.getSource();
        if (source == _yearField && _yearField.getText().length() < 4) return;

        if (source == _monthField && _monthField.getText().length() < 2)
                return;

        if (source == _dayField && _dayField.getText().length() < 2) return;

        Toolkit.getDefaultToolkit().beep();
        e_.consume();
    }

    public void focusGained(FocusEvent fe_) {
    }

    public void focusLost(FocusEvent e_) {
        Component source = (Component) e_.getSource();

        /*
         * Get the absolute origin of this component.
         */
        /* Point origin = */getLocationOnScreen();

        try {
            if (source == _yearField) {
                if (_yearField.getText().equals("")) {
                    String[] msgs = { "A valid year must be ",
                            "entered in this field "};

                    JOptionPane.showMessageDialog(_yearField, msgs, "Error",
                            JOptionPane.ERROR_MESSAGE);

                    _yearField.requestFocus();
                } else {
                    int year = Integer.parseInt(_yearField.getText());
                    _cal.set(Calendar.YEAR, year);
                }
            }

            else if (source == _monthField) {

                if (_monthField.getText().equals("") == false) {
                    int month = Integer.parseInt(_monthField.getText());
                    if (month >= 1 && month <= 12) {
                        _cal.clear(Calendar.DAY_OF_MONTH);
                        _cal.set(Calendar.MONTH, month - 1);
                        return;
                    }
                }
                String[] msgs = { "The month must be", "between 1 and 12"};

                JOptionPane.showMessageDialog(_monthField, msgs, "Error",
                        JOptionPane.ERROR_MESSAGE);

                _monthField.requestFocus();
            }

            else if (source == _dayField) {
                int maxday = _cal.getActualMaximum(Calendar.DAY_OF_MONTH);

                if (_dayField.getText().equals("") == false) {
                    int day = Integer.parseInt(_dayField.getText());

                    /*
                     * By the time we get here, the year and month fields have
                     * been filled in already, so we can check whether the day
                     * is valid.
                     */
                    if (day >= 1 && day <= maxday) {
                        _cal.set(Calendar.DAY_OF_MONTH, day);
                        return;
                    }
                }
                String[] msgs = { "The day must be", "between 1 and " + maxday};
                JOptionPane.showMessageDialog(_dayField, msgs, "Error",
                        JOptionPane.ERROR_MESSAGE);

                _dayField.requestFocus();
            }
        } catch (NumberFormatException e) {
            // should never happen because we are trapping non-numeric
            // keystrokes.
            System.err.println("Number format exception");
        }
    }

    /**
     * Set the fields to the current time.
     */
    public void set() {
        int year = _cal.get(Calendar.YEAR);
        _yearField.setText(Integer.toString(year));

        int month = _cal.get(Calendar.MONTH) + 1;
        _monthField.setText(Integer.toString(month));

        int day = _cal.get(Calendar.DAY_OF_MONTH);
        _dayField.setText(Integer.toString(day));
    }

    /**
     * Set the year field
     */
    public void setYear(int year_) {
        _yearField.setText(Integer.toString(year_));
        _cal.set(Calendar.YEAR, year_);
    }

    /**
     * Set the month field
     */
    public void setMonth(int month_) {
        _monthField.setText(Integer.toString(month_));
        _cal.set(Calendar.MONTH, month_ - 1);
    }

    /**
     */
    public void setDay(int day_) {
        _dayField.setText(Integer.toString(day_));
        _cal.set(Calendar.DAY_OF_MONTH, day_);
    }

    /**
     * Get the year value.
     */
    public int getYear() {
        return Integer.parseInt(_yearField.getText());
    }

    /**
     * Get the month value (between 1 and 12)
     */
    public int getMonth() {
        return Integer.parseInt(_monthField.getText());
    }

    /**
     * Get the day-of-month value.
     */
    public int getDay() {
        return Integer.parseInt(_dayField.getText());
    }

    private JTextField _yearField = new JTextField(4);

    private JTextField _monthField = new JTextField(2);

    private JTextField _dayField = new JTextField(2);

    private GregorianCalendar _cal;
    //private final Window _owner;
}
TOP

Related Classes of charva.awt.util.DateEntryField

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.