java万年历的问题

kojie_chen 2008-05-29 10:29:45
为什么我的万年历不能实现啊 ,哪里有错误啊,老有错误
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;

public class Calendar_year extends JFrame implements ChangeListener,ItemListener
{
JPanel calendarPanel,controlPanel;

JLabel[] title=new JLabel[7];
JLabel[] day=new JLabel[42];

JSpinner yearSpinner;
JComboBox monthBx;
JLabel yearLabel,monthLabel;

int year,month,days;
GregorianCalendar c;

public Calendar_year(){
super("万年历");
setGUIComponent();
getContentPane().add(calendarPanel,BorderLayout.NORTH);
getContentPane().add(controlPanel,BorderLayout.SOUTH);
}
public void setGUIComponent(){
calendarPanel=new JPanel();
c=new GregorianCalendar(TimeZone.getDefault());
year=c.get(Calendar.YEAR);
month=c.get(Calendar.MONTH)+1;
showCalendar();
controlPanel=new JPanel();
SpinnerNumberModel yearModel=new SpinnerNumberModel();
yearSpinner=new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);

yearLabel=new JLabel("年");
String[] monthInt={"1","2","3","4","5","6","7","8","9","10","11","12"};
monthBx=new JComboBox(monthInt);
monthBx.setSelectedIndex(month-1);
monthBx.addItemListener(this);
monthLabel=new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);
}

public void showCalendar(){
title=new JLabel[7];
String[] titleName={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
day=new JLabel[42];
GridLayout layout=new GridLayout(7,7);
calendarPanel.setLayout(layout);

for(int i=0;i<title.length;i++)
{
title[i]=new JLabel(titleName[i]);
calendarPanel.add(title[i]);
}

for(int i=0;i<day.length;i++)
{
day[i]=new JLabel();
calendarPanel.add(day[i]);
}

c=new GregorianCalendar(year,month,1);
year=c.get(Calendar.YEAR);
month=c.get(Calendar.MONTH);
setCalendar(c);
}

public void setCalendar(GregorianCalendar ch){
int firstday=ch.get(Calendar.DAY_OF_WEEK);
year=ch.get(Calendar.YEAR);
month=ch.get(Calendar.MONTH)+1;
switch(month){
case 1: case 3:
case 5: case 7:case 8:case 10:case 12:days=31;break;
case 4:case 6:case 9:case 11:days=30;break;
case 2:if(c.isLeapYear(year))days=29;
else days=28;break;
}
for(int i=0;i<day.length;i++)
day[i].setText("");
year=(Integer)yearSpinner.getValue();//还有这里估计也错了,要设置制定year年,month月份的月历
month=(Integer)monthBx.getSelectedItem();//
}

public void stateChanged(ChangeEvent e){
if(e.getSource()==yearSpinner){
year=(Integer)yearSpinner.getValue();
c=new GregorianCalendar(year,month,1);
setCalendar(c);
}
}
public void itemStateChanged(ItemEvent e){
if(e.getSource()==monthBx){
month=(Integer)monthBx.getSelectedItem();//估计这里用户改变月份错了
}
}

public static void main(String[] args){
Calendar_year calendar=new Calendar_year();
calendar.pack();
calendar.setVisible(true);
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


}

...全文
375 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2008-05-31
  • 打赏
  • 举报
回复
收藏了
kojie_chen 2008-05-31
  • 打赏
  • 举报
回复
终于参考了很多,得到了一个好像还正确 的一个万年历,呵呵,不知道有没有错误,贴出来给大家看看
package calendar;

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;

public class Calendar_year extends JFrame implements ChangeListener,
ItemListener {
JPanel calendarPanel, controlPanel;

JLabel[] title = new JLabel[7];
JLabel[] day = new JLabel[42];

JSpinner yearSpinner;
JComboBox monthBx;
JLabel yearLabel, monthLabel;

int year, month, days;
GregorianCalendar c;

public Calendar_year() {
super("万年历");
setGUIComponent();
getContentPane().add(calendarPanel, BorderLayout.NORTH);
getContentPane().add(controlPanel, BorderLayout.SOUTH);
}

public void setGUIComponent() {
calendarPanel = new JPanel();
c = new GregorianCalendar(TimeZone.getDefault());
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
SpinnerNumberModel yearModel = new SpinnerNumberModel();
yearSpinner = new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);
controlPanel = new JPanel();

yearLabel = new JLabel("年");
String[] monthInt = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11", "12" };
monthBx = new JComboBox(monthInt);
monthBx.setSelectedIndex(month - 1);
monthBx.addItemListener(this);
monthLabel = new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);
showCalendar();

}

public void showCalendar() {
title = new JLabel[7];
String[] titleName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
day = new JLabel[42];
GridLayout layout = new GridLayout(7, 7);
calendarPanel.setLayout(layout);

for (int i = 0; i < title.length; i++) {
title[i] = new JLabel(titleName[i]);
calendarPanel.add(title[i]);
}

for (int i = 0; i < day.length; i++) {
day[i] = new JLabel();
calendarPanel.add(day[i]);
}

c = new GregorianCalendar(year, month, 1);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
setCalendar(c);
}

public void setCalendar(GregorianCalendar ch) {
int firstday = ch.get(Calendar.DAY_OF_WEEK);
year = ch.get(Calendar.YEAR);
month = ch.get(Calendar.MONTH) ;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (c.isLeapYear(year))
days = 29;
else
days = 28;
break;
}
for (int i = 0; i < day.length; i++)
day[i].setText("");

year = (Integer) yearSpinner.getValue();// 还有这里估计也错了,要设置制定year年,month月份的月历
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
ch.set(year, month-1, 0);
System.out.println(year);
System.out.println(month);
System.out.println(firstday);
firstday=ch.get(Calendar.DAY_OF_WEEK);
System.out.println("firstday="+firstday);
int count=1;
for (int i = firstday; i <days+firstday; i++, count++)
day[i].setText(count + "");


}

public void stateChanged(ChangeEvent e) {
if (e.getSource() == yearSpinner) {
year = (Integer) yearSpinner.getValue();
c = new GregorianCalendar(year, month, 1);
setCalendar(c);
}
}

public void itemStateChanged(ItemEvent e) {
if (e.getSource() == monthBx) {
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
c = new GregorianCalendar(year, month, 1);
setCalendar(c);
}
}

public static void main(String[] args) {
Calendar_year calendar = new Calendar_year();
calendar.pack();
calendar.setVisible(true);
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}






palm_civet 2008-05-31
  • 打赏
  • 举报
回复
可以用Calendar类的setTime(Date date) 方法设置日期
palm_civet 2008-05-31
  • 打赏
  • 举报
回复
上面什么错?

注意礼拜天是1

Calendar c = Calendar.getInstance(); 
System.out.println(c.get(Calendar.DAY_OF_WEEK));
kojie_chen 2008-05-31
  • 打赏
  • 举报
回复
package calendar;

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;

public class Calendar_year extends JFrame implements ChangeListener,
ItemListener {
JPanel calendarPanel, controlPanel;

JLabel[] title = new JLabel[7];
JLabel[] day = new JLabel[42];

JSpinner yearSpinner;
JComboBox monthBx;
JLabel yearLabel, monthLabel;

int year, month, days;
GregorianCalendar c;

public Calendar_year() {
super("万年历");
setGUIComponent();
getContentPane().add(calendarPanel, BorderLayout.NORTH);
getContentPane().add(controlPanel, BorderLayout.SOUTH);
}

public void setGUIComponent() {
calendarPanel = new JPanel();
c = new GregorianCalendar(TimeZone.getDefault());
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
SpinnerNumberModel yearModel = new SpinnerNumberModel();
yearSpinner = new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);
controlPanel = new JPanel();

yearLabel = new JLabel("年");
String[] monthInt = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11", "12" };
monthBx = new JComboBox(monthInt);
monthBx.setSelectedIndex(month - 1);
monthBx.addItemListener(this);
monthLabel = new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);
showCalendar();

}

public void showCalendar() {
title = new JLabel[7];
String[] titleName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
day = new JLabel[42];
GridLayout layout = new GridLayout(7, 7);
calendarPanel.setLayout(layout);

for (int i = 0; i < title.length; i++) {
title[i] = new JLabel(titleName[i]);
calendarPanel.add(title[i]);
}

for (int i = 0; i < day.length; i++) {
day[i] = new JLabel();
calendarPanel.add(day[i]);
}

c = new GregorianCalendar(year, month, 1);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
setCalendar(c);
}

public void setCalendar(GregorianCalendar ch) {
int firstday = ch.get(Calendar.DAY_OF_WEEK);
year = ch.get(Calendar.YEAR);
month = ch.get(Calendar.MONTH) ;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (c.isLeapYear(year))
days = 29;
else
days = 28;
break;
}
for (int i = 0; i < day.length; i++)
day[i].setText("");

year = (Integer) yearSpinner.getValue();
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
System.out.println(year);
System.out.println(month);
System.out.println(firstday);
int count=1;
for (int i = firstday+3; i < days+3+firstday; i++, count++)
day[i].setText(count + "");


}

public void stateChanged(ChangeEvent e) {
if (e.getSource() == yearSpinner) {
year = (Integer) yearSpinner.getValue();
c = new GregorianCalendar(year, month, 1);
setCalendar(c);
}
}

public void itemStateChanged(ItemEvent e) {
if (e.getSource() == monthBx) {
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
c = new GregorianCalendar(year, month, 1);
setCalendar(c);
}
}

public static void main(String[] args) {
Calendar_year calendar = new Calendar_year();
calendar.pack();
calendar.setVisible(true);
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

我改了一下上面的,怎么还是错误,我现在的问题是,怎么得到一个月的第一天是星期几,因此循环可以从这个星期几就可以做出来了,帮忙看看




kojie_chen 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 irvine007 的回复:]
jcalendar-1.3.2.jar

www.toedter.com/download/jcalendar-1.3.2.zip


[/Quote]
貌似不能下载
hnjd314053754 2008-05-30
  • 打赏
  • 举报
回复
关注一下
kojie_chen 2008-05-30
  • 打赏
  • 举报
回复
是啊,
for (int i = 0; i < day.length; i++)
day[i].setText("");
year = (Integer) yearSpinner.getValue();// 还有这里估计也错了,要设置制定year年,month月份的月历
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//

我想在这里进行重新初始化之后就要显示日历,可是这里的代码我不太会写,只是提出了日历的年份和月份,
通过这个月份和年份来确定整个月份的日历表,哪位大牛指点一下
Ji秋风 2008-05-30
  • 打赏
  • 举报
回复
jcalendar-1.3.2.jar

www.toedter.com/download/jcalendar-1.3.2.zip

palm_civet 2008-05-30
  • 打赏
  • 举报
回复
实现万年历算法的关键是获得当月的天数以及当月第一天是周几,我上面的js代码就是这样写的
qusic 2008-05-30
  • 打赏
  • 举报
回复
学习~
palm_civet 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jdlsfl 的回复:]
好像没显示出日期
[/Quote]

楼主貌似没写显示的算法
jdlsfl 2008-05-29
  • 打赏
  • 举报
回复
好像没显示出日期
palm_civet 2008-05-29
  • 打赏
  • 举报
回复
你在eclipse里面 ctrl+shift+f自动格式化代码
palm_civet 2008-05-29
  • 打赏
  • 举报
回复
这是你的

showCalendar(); 
controlPanel=new JPanel();
SpinnerNumberModel yearModel=new SpinnerNumberModel();
yearSpinner=new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);

yearLabel=new JLabel("年");
String[] monthInt={"1","2","3","4","5","6","7","8","9","10","11","12"};
monthBx=new JComboBox(monthInt);
monthBx.setSelectedIndex(month-1);
monthBx.addItemListener(this);
monthLabel=new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);


这是我的
       SpinnerNumberModel yearModel = new SpinnerNumberModel();
yearSpinner = new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);
controlPanel = new JPanel();

yearLabel = new JLabel("年");
String[] monthInt = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11", "12" };
monthBx = new JComboBox(monthInt);
monthBx.setSelectedIndex(month - 1);
monthBx.addItemListener(this);
monthLabel = new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);
showCalendar();
kojie_chen 2008-05-29
  • 打赏
  • 举报
回复
你改了哪里,我怎么就不能运行呢,而且复制下来你的代码都没有换行,失败
palm_civet 2008-05-29
  • 打赏
  • 举报
回复
<script language="javascript">
function getMonthDayAmount(Year,Month) {
var Num=0;
if(Month==2) {
if(Year%4==0&&Year%400==0) {
Num=29;
} else {
Num=28;
}
} else {
if(Month==4||Month==6||Month==9 || Month==11) {
Num=30;
} else {
Num=31;
}
}
return Num;
}

function getRenderedHtml(Year, Month, Day, Now) {
var firstDayOfThisMonth = new Date(Year, Month, 1);
var buffer = "";
buffer += "<table id='calendar' cellSpacing='0' cellPadding='0'>";
//create header
buffer += "<caption>";
buffer += Year + "年" + (Month + 1) + "月";
buffer += "</caption>";
//create week header
buffer += "<tr class='title'><th title=Sunday scope=col abbr=Sunday>日</th><th title=Monday scope=col>一</th><th title=Tuesday scope=col>二</th><th title=Wednesday scope=col>三</th><th title=Thursday scope=col>四</th><th title=Friday scope=col>五</TH><th title=Saturday scope=col>六</th></tr>";

var monthDay = getMonthDayAmount(Year, Month);
//create blank in calendar head
buffer += "<tr class='calendar-body'>";
var firstDayWeek = firstDayOfThisMonth.getDay();
for(var i = 0; i < firstDayWeek; i++) {
buffer += "<td> </td>";
}
//create calender body
var c_i = 0;
for(c_i = 1; c_i < monthDay; c_i++ ) {
var current = new Date(Year, Month, c_i);
if(c_i == Day) {
buffer += "<td class='today'>"+ c_i +"</td>";
} else {
buffer += "<td>"+ c_i +"</td>";
}
if(current.getDay() == 6) {
buffer += "</tr>";
if(c_i < monthDay - 1) {
buffer += "<tr class='calendar-body'>";
}
} else {
if(c_i == monthDay - 1) {
for(var j = current.getDay(); j < 6; j++) {
buffer += "<td> </td>";
}
buffer += "</tr>";
}
}
}
return buffer + "</table>";
}
var ddd = new Date();
document.getElementById('calendar-container').innerHTML = getRenderedHtml(ddd.getFullYear(), ddd.getMonth(), ddd.getDate(), ddd);
//alert(document.getElementById('calendar-container').innerHTML);
</script>



我用js实现的万年历,实现的比较简单,你改改吧
palm_civet 2008-05-29
  • 打赏
  • 举报
回复
可以运行起来了,但是你没有实现万年历算法?

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;

public class Calendar_year extends JFrame implements ChangeListener,
ItemListener {
JPanel calendarPanel, controlPanel;

JLabel[] title = new JLabel[7];
JLabel[] day = new JLabel[42];

JSpinner yearSpinner;
JComboBox monthBx;
JLabel yearLabel, monthLabel;

int year, month, days;
GregorianCalendar c;

public Calendar_year() {
super("万年历");
setGUIComponent();
getContentPane().add(calendarPanel, BorderLayout.NORTH);
getContentPane().add(controlPanel, BorderLayout.SOUTH);
}

public void setGUIComponent() {
calendarPanel = new JPanel();
c = new GregorianCalendar(TimeZone.getDefault());
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
SpinnerNumberModel yearModel = new SpinnerNumberModel();
yearSpinner = new JSpinner(yearModel);
yearSpinner.setValue(year);
yearSpinner.addChangeListener(this);
controlPanel = new JPanel();

yearLabel = new JLabel("年");
String[] monthInt = { "1", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "11", "12" };
monthBx = new JComboBox(monthInt);
monthBx.setSelectedIndex(month - 1);
monthBx.addItemListener(this);
monthLabel = new JLabel("月");
controlPanel.add(yearSpinner);
controlPanel.add(yearLabel);
controlPanel.add(monthBx);
controlPanel.add(monthLabel);
showCalendar();

}

public void showCalendar() {
title = new JLabel[7];
String[] titleName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
day = new JLabel[42];
GridLayout layout = new GridLayout(7, 7);
calendarPanel.setLayout(layout);

for (int i = 0; i < title.length; i++) {
title[i] = new JLabel(titleName[i]);
calendarPanel.add(title[i]);
}

for (int i = 0; i < day.length; i++) {
day[i] = new JLabel();
calendarPanel.add(day[i]);
}

c = new GregorianCalendar(year, month, 1);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
setCalendar(c);
}

public void setCalendar(GregorianCalendar ch) {
int firstday = ch.get(Calendar.DAY_OF_WEEK);
year = ch.get(Calendar.YEAR);
month = ch.get(Calendar.MONTH) + 1;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (c.isLeapYear(year))
days = 29;
else
days = 28;
break;
}
for (int i = 0; i < day.length; i++)
day[i].setText("");
year = (Integer) yearSpinner.getValue();// 还有这里估计也错了,要设置制定year年,month月份的月历
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
}

public void stateChanged(ChangeEvent e) {
if (e.getSource() == yearSpinner) {
year = (Integer) yearSpinner.getValue();
c = new GregorianCalendar(year, month, 1);
setCalendar(c);
}
}

public void itemStateChanged(ItemEvent e) {
if (e.getSource() == monthBx) {
String sMonth = (String) monthBx.getSelectedItem();
month = Integer.valueOf(sMonth).intValue();//
}
}

public static void main(String[] args) {
Calendar_year calendar = new Calendar_year();
calendar.pack();
calendar.setVisible(true);
calendar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧