⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datefield.java

📁 这个项目是为Java平台提供一个灵活的日历组件(Ok)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  NachoCalendar * * Project Info:  http://nachocalendar.sf.net * * 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. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc. * in the United States and other countries.] * * Changes * ------- * * 2005-6-18    Fixed constructor * 2004-12-11   setFirsDayOfWeek now works correctly *              Added constructor with DateFormat *              Added getFormattedTextField for further customization * 2004-10-22   setEnabled(boolean b) overriden, now works * 2004-10-01   Checked with checkstyle * 2004-9-2     Added firstDayOfWeek and workingDays *              Renamed some variables *              Added the posibility to use ok/cancel buttons or simple click *              selection * 2004-9-1     Changed the border of the textfield, now outside the component * 2004-8-30    Removed the need to especify parent Frame/Dialog, now *              autodetected * * ------- * * DateField.java * * Created on February 1, 2004, 5:52 PM */package net.sf.nachocalendar.components;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dialog;import java.awt.Frame;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.text.DateFormat;import java.text.ParseException;import java.util.Calendar;import java.util.Date;import java.util.Locale;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFormattedTextField;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.ListSelectionModel;import javax.swing.SwingConstants;import javax.swing.JFormattedTextField.AbstractFormatter;import javax.swing.JFormattedTextField.AbstractFormatterFactory;import javax.swing.border.Border;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.text.DateFormatter;import net.sf.nachocalendar.model.DataModel;/** * Field used to select a date. * @author Ignacio Merani */public class DateField extends JPanel implements ActionListener, PropertyChangeListener {    private WindowPanel windowpanel;    //private Date fecha;    private DatePanel datepanel;    private JFormattedTextField field;    private JButton button;    private Calendar calendar;    private boolean showWeekNumbers;    private DateFormatter formatter;    private boolean antiAliased;    private boolean printMoon;    private Locale locale;    private DateFormat dateFormat;    private Date baseDate;         private AbstractFormatterFactory formatterFactory = new AbstractFormatterFactory() {        public AbstractFormatter getFormatter(JFormattedTextField tf) {            return new DateFormatter(dateFormat);        }    };        /**     * Utility field holding list of ChangeListeners.     */    private transient java.util.ArrayList changeListenerList;        /** Holds value of property showOkCancel. */    private boolean showOkCancel;        /**     * Holds value of property firstDayOfWeek.     */    private int firstDayOfWeek;        /**     * Holds value of property workingDays.     */    private boolean[] workingDays;        /**     * Creates a new instance of DateField.     * @param showWeekNumbers true if the week numbers must be shown     *     */    public DateField(boolean showWeekNumbers) {        //panel = new WindowPanel(parent, showWeekNumbers);        this.showWeekNumbers = showWeekNumbers;        init();    }        /**     * Constructs a default DateField.     */    public DateField() {        this(false);    }        /** Constructor with a custom formatter.     * @param formatter formatter used for the textfield     */    public DateField(DateFormatter formatter) {        this.formatter = formatter;        init();    }        public DateField(DateFormat dateFormat) {        this.dateFormat = dateFormat;        init();    }        /**     * Constructor with a custom locale.     *      * @param locale Locale to use     */    public DateField(Locale locale) {        this.locale = locale;        init();    }        private void init() {        if (locale == null) locale = Locale.getDefault();        calendar = Calendar.getInstance();        calendar.set(Calendar.HOUR, 0);        calendar.set(Calendar.MINUTE, 0);        calendar.set(Calendar.MILLISECOND, 0);        datepanel = new DatePanel(showWeekNumbers);        datepanel.setFirstDayOfWeek(firstDayOfWeek);        datepanel.setWorkingDays(workingDays);        datepanel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        setRenderer(new DefaultDayRenderer());        setHeaderRenderer(new DefaultHeaderRenderer());        setLayout(new BorderLayout());        if (dateFormat != null) {            field = new JFormattedTextField(dateFormat);        } else {            if (formatter == null) formatter = new DateFormatter(DateFormat.getDateInstance(DateFormat.SHORT, locale));            field = new JFormattedTextField(formatter);        }        add(field, BorderLayout.CENTER);        button = new ArrowButton(SwingConstants.SOUTH);        add(button, BorderLayout.EAST);        button.addActionListener(this);        field.setValue(new Date());        field.addPropertyChangeListener("value", this);        Border border = field.getBorder();        field.setBorder(null);        setBorder(border);                field.addPropertyChangeListener(new PropertyChangeListener() {            public void propertyChange(PropertyChangeEvent evt) {                firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue());            }        });    }        private void aceptar() {        windowpanel.setVisible(false);        field.setValue(windowpanel.getDate());    }        private void cancelar() {        windowpanel.setVisible(false);    }        private void createWindow() {        Component c = this;        //Dialog d = null;        while (!(c instanceof Dialog) && (c != null)) {            c = c.getParent();        }        if (c != null) {            windowpanel = new WindowPanel((Dialog) c, showWeekNumbers);            return;        }                Frame f = JOptionPane.getFrameForComponent(this);        windowpanel = new WindowPanel(f, showWeekNumbers);    }    /**     * Invoked when an action occurs.     * @param e the event fired     */    public void actionPerformed(ActionEvent e) {        if (windowpanel == null) {            createWindow();        }                Date da = (Date) field.getValue();        if (da == null) {            da = baseDate;        }        if (da == null) {            da = calendar.getTime();        }        windowpanel.setDate(da);        Point p = getLocationOnScreen();        p.y += getHeight();        windowpanel.setLocation(p);        windowpanel.setVisible(true);    }        /**     * Sets the current Date.     * @param value current Date     */    public void setValue(Object value) {        try {            field.setValue(CalendarUtils.convertToDate(value));        } catch (ParseException e) {            e.printStackTrace();        }    }        /**     * Returns the current Date.     * @return current Date     */    public Object getValue() {        return field.getValue();    }        /**     * Registers ChangeListener to receive events.     * @param listener The listener to register.     */    public synchronized void addChangeListener(ChangeListener listener) {        if (changeListenerList == null) {            changeListenerList = new java.util.ArrayList();        }        changeListenerList.add(listener);    }        /**     * Removes ChangeListener from the list of listeners.     * @param listener The listener to remove.     */    public synchronized void removeChangeListener(ChangeListener listener) {        if (changeListenerList != null) {            changeListenerList.remove(listener);        }    }        /**     * Notifies all registered listeners about the event.     *     * @param event The event to be fired     */    private void fireChangeListenerStateChanged(ChangeEvent event) {        java.util.ArrayList list;        synchronized (this) {            if (changeListenerList == null) {                return;            }            list = (java.util.ArrayList) changeListenerList.clone();        }        for (int i = 0; i < list.size(); i++) {            ((javax.swing.event.ChangeListener) list.get(i)).stateChanged(event);        }    }        /**     * Event fired when a property changes.     * @param evt event fired     */    public void propertyChange(PropertyChangeEvent evt) {        fireChangeListenerStateChanged(new ChangeEvent(this));    }        /**     * Getter for property renderer.     * @return Value of property renderer.     */    public DayRenderer getRenderer() {        return datepanel.getRenderer();    }        /**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -