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.testimport 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)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)