📄 datefield.java
字号:
/* * 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 + -