js 日历控件的问题

JavaScript013

js 日历控件的问题,第1张

Calendar1这个id的元素是不是存在

是不是引入了日历的js插件

日历的插件很多,你可以看一下bootstrap-datepicker。比较容易上手。

应为要有交互,选择了Js来实现,也算是

结对编程

的初试吧。

我将显示部分用html

写好,点击的按钮触发事件函数是check();

复制代码

代码如下:

function

onCheck(){

var

Year

=

document.getElementById("year").value

//获取文本框的“年”

var

theYear

=Year

*

1

//转换为number类型

//alert(theYear)

//

获取月值

var

month

=

document.getElementById("month")

var

index1=month.selectedIndex

var

theMonth

=

month.options[index1].value

//获取月值

var

day

=

document.getElementById("day")

var

index2=day.selectedIndex

var

theDay

=

day.options[index2].value

//

输入值判断部分

...

//调用核心函数

days(theYear,theMonth,theDay)

}

MainFrame.java是显示日历程序,Clock.java是日历计算程序(可以不要)。

编译后运行MainFrame这个类即可。

swing窗口显示万年历,jdk1.4以上环境编译运行。

package org.test

import java.awt.BorderLayout

import java.awt.Color

import java.awt.GridLayout

import java.awt.Toolkit

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.sql.Date

import java.util.Calendar

import javax.swing.JComboBox

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPanel

public class MainFrame extends JFrame {

 private static final long serialVersionUID = -306484324260972141L

 JPanel panel = new JPanel(new BorderLayout())

 JPanel panel1 = new JPanel()

 JPanel panel2 = new JPanel(new GridLayout(7, 7))

 JPanel panel3 = new JPanel()

 JLabel[] label = new JLabel[49]

 JLabel y_label = new JLabel("年份")

 JLabel m_label = new JLabel("月份")

 JComboBox com1 = new JComboBox()

 JComboBox com2 = new JComboBox()

 int re_year, re_month, x_size, y_size

 String year_num

 Calendar now = Calendar.getInstance() // 实例化Calendar

 

 MainFrame() {

  super("万年历") 

  setSize(300, 350)

  x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth())

  y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight())

  setLocation((x_size - 300) / 2, (y_size - 350) / 2)

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

  panel1.add(y_label)

  panel1.add(com1)

  panel1.add(m_label)

  panel1.add(com2)

  for (int i = 0 i < 49 i++) {

   label[i] = new JLabel("", JLabel.CENTER)// 将显示的字符设置为居中 

   panel2.add(label[i])

  }

  panel3.add(new Clock(this))

  panel.add(panel1, BorderLayout.NORTH)

  panel.add(panel2, BorderLayout.CENTER)

  panel.add(panel3, BorderLayout.SOUTH) 

  panel.setBackground(Color.white)

  panel1.setBackground(Color.white)

  panel2.setBackground(Color.white)

  panel3.setBackground(Color.white)

  Init()

  com1.addActionListener(new ClockAction())

  com2.addActionListener(new ClockAction())

  setContentPane(panel)

  setVisible(true)

  setResizable(false)

 }

 

 class ClockAction implements ActionListener {

  public void actionPerformed(ActionEvent arg0) {

   int c_year, c_month, c_week

   c_year = Integer.parseInt(com1.getSelectedItem().toString()) // 得到当前所选年份 

   c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1 // 得到当前月份,并减1,计算机中的月为0-11

   c_week = use(c_year, c_month) // 调用函数use,得到星期几

   Resetday(c_week, c_year, c_month) // 调用函数Resetday

   }

 }

 

 public void Init() {

  int year, month_num, first_day_num

  String log[] = { "日", "一", "二", "三", "四", "五", "六" }

  for (int i = 0 i < 7 i++) {

   label[i].setText(log[i])

  }

  

  for (int i = 0 i < 49 i = i + 7) {

   label[i].setForeground(Color.red) // 将星期日的日期设置为红色

  }

  

  for (int i = 6 i < 49 i = i + 7) {

   label[i].setForeground(Color.green)// 将星期六的日期设置为绿色

  }

  

  for (int i = 1 i < 10000 i++) {

   com1.addItem("" + i)

  }

  

  for (int i = 1 i < 13 i++) {

   com2.addItem("" + i)

  }

  

  month_num = (int) (now.get(Calendar.MONTH)) // 得到当前时间的月份 

  year = (int) (now.get(Calendar.YEAR)) // 得到当前时间的年份  

  com1.setSelectedIndex(year - 1) // 设置下拉列表显示为当前年

  com2.setSelectedIndex(month_num) // 设置下拉列表显示为当前月

  first_day_num = use(year, month_num)

  Resetday(first_day_num, year, month_num)

 }

 

 public int use(int reyear, int remonth) {

  int week_num

  now.set(reyear, remonth, 1) // 设置时间为所要查询的年月的第一天

  week_num = (int) (now.get(Calendar.DAY_OF_WEEK))// 得到第一天的星期 

  return week_num

 } 

 

 @SuppressWarnings("deprecation")

 public void Resetday(int week_log, int year_log, int month_log) {

  int month_day_score // 存储月份的天数 

  int count

  month_day_score = 0

  count = 1

  Date date = new Date(year_log, month_log + 1, 1) // now

  Calendar cal = Calendar.getInstance()

  cal.setTime(date)

  cal.add(Calendar.MONTH, -1) // 前个月

  month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH)// 最后一天

  for (int i = 7 i < 49 i++) { // 初始化标签

   label[i].setText("")

  }

  week_log = week_log + 6 // 将星期数加6,使显示正确

  month_day_score = month_day_score + week_log

  for (int i = week_log i < month_day_score i++, count++) {

   label[i].setText(count + "")

  }

 }

 

 public static void main(String[] args) {

  JFrame.setDefaultLookAndFeelDecorated(true)

  new MainFrame()

 }

} package org.test

import java.awt.Color

import java.util.Calendar

import java.awt.Canvas

import java.awt.Font

import java.awt.Graphics

import java.text.SimpleDateFormat

public class Clock extends Canvas implements Runnable{

 private static final long serialVersionUID = 3660124045489727166L

 MainFrame mf

 Thread t

 String time

 

 public Clock(MainFrame mf){

  this.mf=mf

  setSize(280,40)

  setBackground(Color.white)

  t=new Thread(this)//实例化线程

  t.start() 

  //调用线程   

 }

 

 public void run(){

  while(true){

   try{

    Thread.sleep(1000)//休眠1秒钟

   }catch(InterruptedException e){

    System.out.println("异常")

   }

   this.repaint(100)

  }

 }

 

 public void paint(Graphics g){

  Font f=new Font("宋体",Font.BOLD,16)

  SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss")//格式化时间显示类型  

  Calendar now=Calendar.getInstance()

  time=SDF.format(now.getTime())        //得到当前日期和时间    

  g.setFont(f)

  g.setColor(Color.orange)

  g.drawString(time,45,25)

 }

}