此日历控件在www.eltima.com上给的Swing library4.0的jar包里提出出来 并重新封装在DatePicker类中 将必要的函数由私有状态提升为公开状态或将混淆过的代码重新命名.
下载地址:https://download.csdn.net/download/a276202460/1023826
源码地址:https://download.csdn.net/download/a276202460/12610630
源于同一demo的 sidebar的一个提取见另一篇博文:
http://blog.csdn.net/a276202460/archive/2009/07/04/4321837.aspx
DatePicker类继承自JComponent所以在实例化后可添加到任何容器中(JPanel,JFrame,JDialog等)
使用方法:
DatePicker datepick = new DatePicker(Component c,new Date());//c为此组件所许要放置的父容器 d 初始化指定日期 // DatePicker datepick = new DatePicker(Component c);//无初始化日期 datepick.setLocale(Locale.US);//设置显示语言 datepick.setPattern("MM/dd/yyyy");//设置日期格式化字符串 datepick.setEditorable(false);//设置是否可编辑 datepick.setBackground(Color.gray);//设置背景色 datepick.setForeground(Color.yellow);//设置前景色 datepick.setPreferredSize(new Dimension(100,21));//设置大小 datepick.setTextAlign(DatePicker.CENTER);//设置文本水平方向位置:DatePicker.CENTER 水平居中,DatePicker.LEFT 水平靠左 DatePicker.RIGHT 水平靠右
效果:
使用datepick.getText()获得文本域的值
修改了这个控件的一些bug.
1. setLocale方法建议不要使用,在当前日期为null的情况下 日历不会默认为当天
2. 默认格式化格式为:"MM/dd/yyyy"
3. 默认环境为:Locale.US
4. 无日期初始化的时候日历默认为当前
5. 公开timepanel控制函数
datepick1.setTimePanleVisible(true);
6.去除在文本框中直接编辑时自动弹出日期选择窗口,在允许手动编辑改文本框的情况下,错误处理如下
错误对话框是否显示控制:
setShowerrormsg(Boolean flag)
错误消息设置:
setErrormsg(String errormsg);默认为:"InValid Date!/nPattern:(" + pattern + ")";
public void setCalendarVisible(boolean flag)//设置日期选择面板显示或隐藏
public void setDisableddays(int[] days)//设置不可选择日历数组
datepick1.setDisableddays(new int[]{1,2,3,4,5,5} );//设置每个月的1,2,3,4,5,6号日期不可选
public void setHightlightdays(int[] days, Color color)//根据指定的颜色高亮显示指定的日期
datepick1.setHightlightdays(new int[]{1,2,3,4,5,5} , Color.red);
可以使用addFocusLostListener(FocusLostListener f)添加焦点失去监听
addfocusInListener(FocusGainedListener f) 添加焦点获取监听
simple example:
import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JFrame; import com.eltima.components.ui.DatePicker; public class DatepcikTest extends JFrame { public DatepcikTest() { super("test"); setSize(300, 300); Container c = this.getContentPane(); c.setLayout(new FlowLayout()); DatePicker dp = new DatePicker(this); c.add(dp); DatePicker dp1 = new DatePicker(this); dp1.setEditorable(false); c.add(dp1); DatePicker dp2 = new DatePicker(this); dp2.setPattern("MM/dd/yyyy HH:mm:ss"); dp2.setTimePanleVisible(true); c.add(dp2); DatePicker dp3 = new DatePicker(this); dp3.setTextAlign(DatePicker.RIGHT); c.add(dp3); } public static void main(String[] s) { new DatepcikTest().setVisible(true); } }