使用JAVA编程万年历要求:使用图形用户界面;实现日期与星期的查询。

使用JAVA编程万年历要求:使用图形用户界面;实现日期与星期的查询。,第1张

这是我刚做出来的,时间紧迫,做得有些粗糙,但是你要的功能基本实现了!import java.awt.*

import java.text.*

import javax.swing.*

import java.awt.event.*

import java.util.*

//import java.util.Timer

public class DataSimple implements ItemListener

{

JFrame mainFrame

JLabel yearLabel,monthLabel,showTextLabel,timeLabel

JTextArea showArea

JComboBox yearBox,monthBox

JPanel panel_top,panel_down

Container con

//JTable myTable

//JScrollPane JSpane

String year[]=new String[9000]

String month[]=new String[12]

Date today

GregorianCalendar cal

//Timer myTimer

//TimerTask myTask

int totalDays,startDay,i

String selectYear,selectMonth

Object [][] day=new Object[4][6]

static final String head[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}

SimpleDateFormat timeFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")

public DataSimple()

{

mainFrame=new JFrame("模拟万年日历")

con=mainFrame.getContentPane()

yearLabel=new JLabel("选择年份:")

monthLabel=new JLabel("选择月份:")

for(int i=1900i<10000i++)

{

try

{

//year[i-1900]=(new Integer(i)).toString()

year[i-1900]=String.valueOf(i)

}

catch(Exception e)

{

JOptionPane.showMessageDialog(mainFrame,"出现异常")

}

}

yearBox=new JComboBox(year)

yearBox.setSelectedItem("2010")

yearBox.addItemListener(this)

for(int i=0i<12i++)

{

month[i]=(new Integer(i)).toString()

}

monthBox=new JComboBox(month)

monthBox.setSelectedItem("1")

monthBox.addItemListener(this)

panel_top=new JPanel()

panel_top.setLayout(new FlowLayout())

panel_top.add(yearLabel)

panel_top.add(yearBox)

panel_top.add(monthLabel)

panel_top.add(monthBox)

con.add(panel_top,BorderLayout.NORTH)

showArea=new JTextArea()

showArea.setEditable(false)

showDate(2010,1)

//myTable=new JTable(day,head)

con.add(showArea,BorderLayout.CENTER)

showTextLabel=new JLabel("现在时间是:")

today=new Date()

timeLabel=new JLabel(timeFormat.format(today))

panel_down=new JPanel()

panel_down.setLayout(new FlowLayout())

panel_down.add(showTextLabel)

panel_down.add(timeLabel)

con.add(panel_down,BorderLayout.SOUTH)

//con.add(showArea,BorderLayout.CENTER)

mainFrame.setSize(400,300)

mainFrame.setVisible(true)

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

public void showDate(int year,int month)

{

showArea.setText("")

cal=new GregorianCalendar(year,month-1,1)

totalDays=cal.getActualMaximum(Calendar.DAY_OF_MONTH)

startDay=cal.get(Calendar.DAY_OF_WEEK)-1

for(i=0i<head.lengthi++)

showArea.append(head[i]+" ")

showArea.append("\n")

//输出第一天之前的空格,每个输出项8个空格

for(i=0i<startDayi++)

{

//day[0][i]=new Integer(0)

showArea.append(" ")

}

//依次输出每一天,每一个输出项占8个字符宽度

for(int days=1days<=totalDaysdays++)

{ /*for(int j=0j<5j++)

{

for(int z=0z<7z++)

{

if(!day[j][z].equals(0))

{

day[j][z]=new Integer(days)

}*/

if(days<10)

{

showArea.append(" "+days+" ")

}

else if(days>=10)

{

showArea.append(""+days+"")

}

i++

if(i==7)

{

showArea.append("\n")

i=0

}

/*}

}*/

}

}

public void itemStateChanged(ItemEvent e)

{

if(e.getStateChange()==ItemEvent.SELECTED)

{

selectYear=(String)(yearBox.getSelectedItem())

selectMonth=(String)(monthBox.getSelectedItem())

showDate(Integer.parseInt(selectYear),Integer.parseInt(selectMonth))

}

}

public static void main(String argv[])

{

new DataSimple()

}

}运行截图:

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)

 }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11283673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存