JAVA基础应用:日期时间选择控件(代码)

2016-02-19 19:27 37 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的JAVA基础应用:日期时间选择控件(代码),喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

    一次项目研发中需要日期时间选择控件,网上提供的不多,且质量一般,所以只好自己做,参考了网上某位同学的作品Jave日期选择控件DateChooser 。目前的代码将日期时间选择封装在一个按钮组件内,应该很好用,支持Application 、Applet
  
  CODE:
  
  import Java.util.Date;
  import java.util.Calendar;
  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.text.ParseException ;
  import java.awt.Color ;
  import java.awt.Font;
  import java.awt.Point ;
  import java.awt.Dimension ;
  import java.awt.BorderLayout ;
  import java.awt.FlowLayout ;
  import java.awt.GridLayout ;
  import java.awt.Component ;
  import java.awt.Cursor ;
  import java.awt.Frame ;
  
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  //import javax.swing.JFrame;
  import javax.swing.JButton;
  import javax.swing.JDialog;
  import javax.swing.JPanel;
  import javax.swing.JLabel;
  import javax.swing.jspinner ;
  import javax.swing.JSpinner.NumberEditor ;
  import javax.swing.SpinnerNumberModel;
  import javax.swing.SwingUtilities;
  import javax.swing.SwingConstants ;
  import javax.swing.event.ChangeListener ;
  import javax.swing.event.ChangeEvent ;
  import javax.swing.border.LineBorder ;
  
  public class DateChooserJButton extends JButton {
  
  private DateChooser dateChooser =null;
  
  private String preLabel ="" ;
  
  public DateChooserJButton() {
  this(getNowDate()) ;
  }
  
  public DateChooserJButton(SimpleDateFormat df , String dateString) {
  this() ;
  setText(df,dateString) ;
  }
  
  public DateChooserJButton(Date date) {
  this("",date);
  }
  
  public DateChooserJButton(String preLabel , Date date) {
  if (preLabel!=null) this.preLabel = preLabel ;
  setDate(date) ;
  setBorder(null) ;
  setCursor(new Cursor(Cursor.HAND_CURSOR)) ;
  super.addActionListener( new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  if (dateChooser==null) dateChooser = new DateChooser();
  Point p = getLocationOnScreen() ;
  p.y = p.y+30 ;
  dateChooser.showDateChooser(p) ;
  }
  }) ;
  }
  
  private static Date getNowDate() {
  return Calendar.getInstance().getTime() ;
  }
  
  private static SimpleDateFormat getDefaultDateFormat() {
  return new SimpleDateFormat("yyyy年MM月dd日HH时") ;
  }

  

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)
  //覆盖父类的方法
  public void setText(String s) {
  Date date ;
  try {
  date = getDefaultDateFormat().parse(s) ;
  }catch (ParseException e) {
  date = getNowDate() ;
  }
  setDate(date) ;
  }
  
   !-- frame contents --!-- /frame contents -- public void setText(SimpleDateFormat df , String s) {
  
   Date date ;
  try {
  date = df.parse(s) ;
  }catch (ParseException e) {
  date = getNowDate() ;
  }
  setDate(date) ;
  }
  
  public void setDate(Date date) {
  super.setText(preLabel+getDefaultDateFormat().format(date));
  }
  
  public Date getDate() {
  String dateString = getText().substring(preLabel.length());
  try {
  return getDefaultDateFormat().parse(dateString);
  } catch (ParseException e) {
  return getNowDate() ;
  }
  
  }
  
  //覆盖父类的方法使之无效
  public void addActionListener(ActionListener listener ) {
  }
  
  private class DateChooser extends JPanel implements ActionListener ,ChangeListener {
  int startYear = 1980; //默认显示年份
  int lastYear = 2050; //默认显示年份
  int width = 200; //界面宽度
  int height = 200; //界面高度
  
  Color backGroundColor = Color.gray; //底色
  //月历表格配色----------------//
  Color palletTableColor = Color.white; //日历表底色
  Color todayBackColor = Color.orange; //今天背景色
  Color weekFontColor = Color.blue; //星期文字色
  Color dateFontColor = Color.black; //日期文字色
  Color weekendFontColor = Color.red; //周末文字色
  
  //控制条配色------------------//
  Color controlLineColor = Color.pink; //控制条底色
  Color controlTextColor = Color.white; //控制条标签文字色
  
  Color rbFontColor = Color.white; //RoundBox文字色
  Color rbBorderColor = Color.red; //RoundBox边框色
  Color rbButtonColor = Color.pink; //RoundBox按钮色
  Color rbBTFontColor = Color.red; //RoundBox按钮文字色
  
  JDialog dialog ;
  JSpinner yearSpin ;
  JSpinner monthSpin ;
  JSpinner hourSpin ;
  JButton[][] daysButton = new JButton[6][7] ;
  
  DateChooser() {
  
  setLayout(new BorderLayout());
  setBorder(new LineBorder(backGroundColor, 2));
  setBackground(backGroundColor);
  
  JPanel topYearAndMonth = createYearAndMonthPanal();
  add(topYearAndMonth,BorderLayout.NORTH);
  JPanel centerWeekAndDay = createWeekAndDayPanal();
  add(centerWeekAndDay,BorderLayout.CENTER);
  
  }
  
  private JPanel createYearAndMonthPanal(){
  Calendar c = getCalendar() ;
  int currentYear =c.get(Calendar.YEAR);
  int currentMonth =c.get(Calendar.MONTH)+1;
  int currentHour =c.get(Calendar.HOUR_OF_DAY);
  
  JPanel result = new JPanel();
  result.setLayout(new FlowLayout());
  result.setBackground(controlLineColor);
  
  yearSpin = new JSpinner(new SpinnerNumberModel(currentYear,startYear,lastYear,1));
  yearSpin.setPreferredSize(new Dimension(48,20)) ;
  yearSpin.setName("Year") ;
  yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####")) ;
  yearSpin.addChangeListener(this) ;
  result.add(yearSpin) ;
  
  JLabel yearLabel = new JLabel("年");
  yearLabel.setForeground(controlTextColor);
  result.add(yearLabel);
  
  monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth,1,12,1));
  monthSpin.setPreferredSize(new Dimension(35,20)) ;
  monthSpin.setName("Month") ;
  monthSpin.addChangeListener(this) ;
  
   result.add(monthSpin) ;
  
  JLabel monthLabel = new JLabel("月");
  monthLabel.setForeground(controlTextColor);
  result.add(monthLabel);
  
  hourSpin = new JSpinner(new SpinnerNumberModel(currentHour,0,23,1));
  hourSpin.setPreferredSize(new Dimension(35,20)) ;
  hourSpin.setName("Hour") ;
  hourSpin.addChangeListener(this) ;
  result.add(hourSpin) ;
  
  JLabel hourLabel = new JLabel("时");
  hourLabel.setForeground(controlTextColor);
  result.add(hourLabel);
  
  return result ;
  }
  
  

  

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)
  private JPanel createWeekAndDayPanal() {
  String colname[] = {"日","一","二","三","四","五","六"};
  JPanel result = new JPanel();
  //设置固定字体,以免调用环境改变影响界面美观
  result.setFont(new Font("宋体", Font.PLAIN, 12));
   !-- frame contents --!-- /frame contents -- result.setLayout(new GridLayout(7,7));
  result.setBackground(Color.white);
  JLabel cell ;
  
  for(int i=0;i7;i++) {
  cell = new JLabel(colname[i]);
  cell.setHorizontalAlignment(JLabel.RIGHT);
  if (i==0 i==6) cell.setForeground(weekendFontColor) ;
  else cell.setForeground(weekFontColor) ;
  result.add(cell) ;
  }
  
  int actionCommandId = 0 ;
  for(int i = 0; i 6; i++)
  for(int j = 0; j 7; j++) {
  JButton numberButton = new JButton();
  numberButton.setBorder(null) ;
  numberButton.setHorizontalAlignment(SwingConstants.RIGHT);
  numberButton.setActionCommand(String.valueOf(actionCommandId)) ;
  numberButton.addActionListener(this) ;
  numberButton.setBackground(palletTableColor);
  numberButton.setForeground(dateFontColor) ;
  if (j==0 j==6) numberButton.setForeground(weekendFontColor) ;
  else numberButton.setForeground(dateFontColor) ;
  daysButton[i][j] = numberButton;
  result.add(numberButton) ;
  actionCommandId ++ ;
  }
  
  return result;
  }
  
  private JDialog createDialog(Frame owner ) {
  JDialog result = new JDialog(owner,"日期时间选择",true) ;
  result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
  result.getContentPane().add(this,BorderLayout.CENTER) ;
  result.pack() ;
  result.setSize(width, height);
  return result ;
  }
  
  void showDateChooser(Point position ) {
  Frame owner =(Frame)SwingUtilities.getWindowAncestor(DateChooserJButton.this) ;
  if (dialog==null dialog.getOwner()!= owner) dialog = createDialog(owner ) ;
  dialog.setLocation(getAppropriateLocation(owner ,position ) ) ;
  flushWeekAndDay() ;
  dialog.show();
  }
  
  Point getAppropriateLocation(Frame owner ,Point position ) {
  Point result = new Point(position) ;
  Point p = owner.getLocation() ;
  int offsetX = (position.x+width) - (p.x + owner.getWidth() ) ;
  int offsetY = (position.y+height) - (p.y + owner.getHeight() ) ;
  
  if (offsetX 0 ) {
  result.x -= offsetX ;
  }
  
  if (offsetY 0 ) {
  
   result.y -= offsetY ;
  }
  
  return result ;
  
  }
  
  private Calendar getCalendar() {
  Calendar result = Calendar.getInstance();
  result.setTime(getDate()) ;
  return result ;
  }
  
  private int getSelectedYear() {
  return ((Integer)yearSpin.getValue()).intValue() ;
  }
  
  private int getSelectedMonth() {
  return ((Integer)monthSpin.getValue()).intValue() ;
  }
  
  private int getSelectedHour() {
  return ((Integer)hourSpin.getValue()).intValue() ;
  }
  
  private void dayColorUpdate(boolean isOldDay) {
  Calendar c = getCalendar() ;
  int day = c.get(Calendar.DAY_OF_MONTH);
  c.set(Calendar.DAY_OF_MONTH,1);
  int actionCommandId =day-2+c.get(Calendar.DAY_OF_WEEK) ;
  int i = actionCommandId/7;
  int j = actionCommandId%7;
  if (isOldDay) daysButton[i][j].setForeground(dateFontColor) ;
  else daysButton[i][j].setForeground(todayBackColor) ;
  }
  
  private void flushWeekAndDay() {
  Calendar c = getCalendar() ;
  c.set(Calendar.DAY_OF_MONTH,1);
  int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
  int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK) ;
  for(int i = 0; i 6; i++) {
  for(int j = 0; j 7; j++) {
  String s="" ;
  if (dayNo=1 && dayNo=maxDayNo ) s = String.valueOf(dayNo) ;
  daysButton[i][j].setText(s) ;
  dayNo ++ ;
  }
  }
  dayColorUpdate(false) ;
  }
  
  public void stateChanged(ChangeEvent e) {
  JSpinner source =(JSpinner)e.getSource() ;
  Calendar c = getCalendar() ;
  if (source.getName().equals("Hour")) {
  c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
  setDate(c.getTime());
  return ;
  }
  
  dayColorUpdate(true) ;
  
  if (source.getName().equals("Year"))
  c.set(Calendar.YEAR, getSelectedYear());
  else
  // (source.getName().equals("Month"))
  c.set(Calendar.MONTH, getSelectedMonth()-1);
  setDate(c.getTime());
  flushWeekAndDay() ;
  }
  
  public void actionPerformed(ActionEvent e) {
  JButton source =(JButton)e.getSource() ;
  if (source.getText().length()==0) return ;
  dayColorUpdate(true) ;
  source.setForeground(todayBackColor) ;
  int newDay = Integer.parseInt(source.getText());
  Calendar c = getCalendar() ;
  c.set(Calendar.DAY_OF_MONTH,newDay);
  setDate(c.getTime());
  }
  
  }
  
  }
  

  

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1621067.html

延伸阅读
public DateInput() { // 该调用是 Windows.Forms 窗体设计器所必需的。 InitializeComponent(); tbMonth.ContextMenu = mnu ; tbYear.ContextMenu = mnu ; tbDay.ContextMenu = mnu ; this.Height = 21 ; this.Value = DateTime.Now ; this.DateFormat = "yyyy-MM-dd" ; if (!this.DesignMode) CreateCalendar() ; this.UpDown.Width = 16 ; ...
在做多语言版本的时候,日期时间的格式话是一个很头疼的事情,幸好Android提供了DateFormate,可以根据指定的语言区域的默认格式来格式化。 直接贴代码: 代码如下: public static CharSequence formatTimeInListForOverSeaUser( final Context context, final long time, final boolean simple, Locale locale) { final GregorianCale...
#region 组件设计器生成的代码 /// /// 设计器支持所需的方法 - 不要使用代码编辑器 /// 修改此方法的内容。 /// private void InitializeComponent() { this.panel3 = new System.Windows.Forms.Panel(); this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.lbSpace = new System.W...
String str = "n1e你v00a?Az$Z000?#99?9900眯2_悄s3你y4@好?!6求救你d75a8t"; Pattern p= Pattern.compile("[\u4e00-\u9fa5]");//把汉字截取出来。 Matcher m= p.matcher(str); while(m.find()){ System.out.print(m.group()); } String str = "n1e你v00a?Az$Z000?#99?9900眯2_悄s3你y4@好?!6求救你d75a8t"; String a = ""; String b =...
标签: 电脑入门
本篇介绍Excel日期时间函数 1.DATE 用途:返回代表特定日期的序列号。 语法:DATE(year,month,day) 参数:year为一到四位,根据使用的日期系统解释该参数。默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。Month代表每年中月份的数字。如果所输入的月份大于12,将从指定年份的一月份执行加法运...

经验教程

878

收藏

61
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部