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

和平盛世时代

和平盛世时代

2016-02-19 19:27

今天给大家分享的是由图老师小编精心为您推荐的JAVA基础应用:日期时间选择控件(代码),喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!
    一次项目研发中需要日期时间选择控件,网上提供的不多,且质量一般,所以只好自己做,参考了网上某位同学的作品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时") ;
  }

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.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 ;
  }
  
  

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.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());
  }
  
  }
  
  }
  

  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
JAVA基础应用:日期时间选择控件(代码)

java时间戳转日期格式的实现代码

编程语言 网络编程
java时间戳转日期格式的实现代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java应用:编写高级JavaScript应用代码

编程语言 网络编程
Java应用:编写高级JavaScript应用代码

VC增强Edit控件为日期输入控件

编程语言 网络编程
VC增强Edit控件为日期输入控件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JAVA应用系统工具快捷托盘实例代码

编程语言 网络编程
JAVA应用系统工具快捷托盘实例代码

完整显示当前日期和时间的JS代码

Web开发
完整显示当前日期和时间的JS代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

字体对象克隆招法

字体对象克隆招法

用JSP实现类似资源管理器式的文件与目录的折叠(代码示例)

用JSP实现类似资源管理器式的文件与目录的折叠(代码示例)
下拉加载更多内容 ↓