import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class Test03 extends JFrame implements ItemListener { JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p31 = new JPanel();
JPanel p32 = new JPanel();
Choice chYear = new Choice();
JLabel ln = new JLabel("年");
Choice chMonth = new Choice();
JLabel ly = new JLabel("月");
Choice chDay = new Choice();
JLabel ld = new JLabel("日");
JButton b1 = new JButton("开始倒计时");

JLabel ls = new JLabel("时"); 
JLabel lss = new JLabel("");
JLabel lf = new JLabel("分");
JLabel lff = new JLabel("");
JLabel lm = new JLabel("秒");
JLabel lmm = new JLabel("");
JLabel lz = new JLabel("当前系统时间");

JLabel[] week = new JLabel[7];
JLabel[] riqi = new JLabel[42];

JLabel juli = new JLabel("距离");
JLabel julih = new JLabel("");
JLabel nian = new JLabel("年");
JLabel nianh = new JLabel("");
JLabel yue = new JLabel("月");
JLabel yueh = new JLabel("");
JLabel ri = new JLabel("日");
JLabel rih = new JLabel("还有");
JLabel tian = new JLabel("");
JLabel tianh = new JLabel("天");
JLabel shi = new JLabel("");
JLabel shih = new JLabel("时");
JLabel fen = new JLabel("");
JLabel fenh = new JLabel("分");
JLabel miao = new JLabel("");
JLabel miaoh = new JLabel("秒");

public Test03(){
super("快乐倒计时");
setBounds(400, 400, 400, 400);
initShang();
initZhong();
initXia1();
initxia2();
itemStateChanged(null);
add(p1,BorderLayout.NORTH);
add(p2,BorderLayout.CENTER);
add(p3,BorderLayout.SOUTH);
p3.setLayout(new GridLayout(0, 2));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public void initShang() {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
int year = Integer.parseInt(chYear.getSelectedItem());
int month = Integer.parseInt(chMonth.getSelectedItem());
int day = Integer.parseInt(chDay.getSelectedItem());
for (int i = year; i < year+15; i++) {
chYear.add(String.valueOf(i));
}
chYear.add(String.valueOf(year));
for (int i = 1; i < 13; i++) {
chMonth.add(String.valueOf(i));
}
chMonth.add(String.valueOf(month));
for (int i = 1; i < 31; i++) {
chDay.add(String.valueOf(i));
}
chDay.add(String.valueOf(day));
chYear.addItemListener(this);
chMonth.addItemListener(this);
chDay.addItemListener(this);
p1.add(chYear);
p1.add(ln);
p1.add(chMonth);
p1.add(ly);
p1.add(chDay);
p1.add(ld);
p1.add(b1);

}

public void initZhong() {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
int  hour = cal.get(Calendar.HOUR);
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
p2.add(lz);
p2.add(ls);
p2.add(lss);
lss.setText(lss+"");
p2.add(lf);
p2.add(lff);
lff.setText(lff+"");
p2.add(lm);
p2.add(lmm);
lmm.setText(sec+"");
}

public void initxia2() {
// TODO Auto-generated method stub
p3.add(p31,BorderLayout.WEST);
p31.setLayout(new GridLayout(0,7));
String[] ss = {"日","一","二","三","四","五","六"};
for (int i = 1; i < ss.length; i++) {
week[i]=new JLabel(ss[i],JLabel.CENTER);
p31.add(week[i]);
}
for (int i = 0; i <riqi.length ; i++) {
riqi[i]=new JLabel("",JLabel.CENTER);
p31.add(riqi[i]);
}
}
private void initXia1() {
// TODO Auto-generated method stub
p3.add(p32,BorderLayout.EAST);
int year = Integer.parseInt(chYear.getSelectedItem());
int month = Integer.parseInt(chMonth.getSelectedItem());
int day = Integer.parseInt(chDay.getSelectedItem());
p32.add(juli);
p32.add(julih);
p32.add(nian);
p32.add(nianh);
p32.add(yue);
p32.add(yueh);
p32.add(ri);
p32.add(rih);
p32.add(tian);
p32.add(tianh);
p32.add(shi);
p32.add(shih);
p32.add(fen);
p32.add(fenh);
p32.add(miao);
p32.add(miaoh);
}
public static void main(String[] args) {
new Test03(); }

@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
int year = Integer.parseInt(chYear.getSelectedItem());
int month = Integer.parseInt(chMonth.getSelectedItem());
int day = Integer.parseInt(chDay.getSelectedItem());
Calendar cal = Calendar.getInstance();
cal.set(year,month-1,1);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
int days= getDays(year,month);
for (int i = 0; i < 42; i++) {
riqi[i].setText("");
}
int index = 1;
for (int i = dayofweek-1; i < dayofweek-1+days; i++) {
riqi[i].setText(String.valueOf(index));
index++;
}
}
public int getDays(int year, int month) {
// TODO Auto-generated method stub
int[] ss = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if((month==2)&&(year%4==0||year%400==0&&year%100!=0)){
return 29;
}
return ss[month];
}}

解决方案 »

  1.   

    import java.awt.BorderLayout;
    import java.awt.Choice;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.util.Calendar;
    import java.util.Date;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;public class Test03 extends JFrame implements ItemListener, ActionListener { JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();
    JPanel p31 = new JPanel();
    JPanel p32 = new JPanel();
    Choice chYear = new Choice();
    JLabel ln = new JLabel("年");
    Choice chMonth = new Choice();
    JLabel ly = new JLabel("月");
    Choice chDay = new Choice();
    JLabel ld = new JLabel("日");
    JButton b1 = new JButton("开始倒计时");//加监听,否则点了也没用 JLabel ls = new JLabel("时");
    JLabel lss = new JLabel("");
    JLabel lf = new JLabel("分");
    JLabel lff = new JLabel("");
    JLabel lm = new JLabel("秒");
    JLabel lmm = new JLabel("");
    JLabel lz = new JLabel("当前系统时间"); JLabel[] week = new JLabel[7];
    JLabel[] riqi = new JLabel[42]; JLabel juli = new JLabel("距离");
    JLabel julih = new JLabel("");
    JLabel nian = new JLabel("年");
    JLabel nianh = new JLabel("");
    JLabel yue = new JLabel("月");
    JLabel yueh = new JLabel("");
    JLabel ri = new JLabel("日");
    JLabel rih = new JLabel("还有");
    JLabel tian = new JLabel("");
    JLabel tianh = new JLabel("天");
    JLabel shi = new JLabel("");
    JLabel shih = new JLabel("时");
    JLabel fen = new JLabel("");
    JLabel fenh = new JLabel("分");
    JLabel miao = new JLabel("");
    JLabel miaoh = new JLabel("秒"); public Test03() {
    super("快乐倒计时");
    setBounds(400, 400, 400, 400);
    initShang();
    initZhong();
    initXia1();
    initxia2();
    itemStateChanged(null);
    add(p1, BorderLayout.NORTH);
    add(p2, BorderLayout.CENTER);
    add(p3, BorderLayout.SOUTH);
    p3.setLayout(new GridLayout(0, 2));
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    } public void initShang() {//先加入可选 选项才能选 啊,所以三个循环在前
    // TODO Auto-generated method stub
    for (int i = 1999; i <=1999 + 15; i++) {
    chYear.add(String.valueOf(i));
    }
    for (int i = 1; i < 13; i++) {
    chMonth.add(String.valueOf(i));
    }
    for (int i = 1; i < 31; i++) {
    chDay.add(String.valueOf(i));
    }
    int year = Integer.parseInt(chYear.getSelectedItem());
    int month = Integer.parseInt(chMonth.getSelectedItem());
    int day = Integer.parseInt(chDay.getSelectedItem());
    chYear.addItemListener(this);
    chMonth.addItemListener(this);
    chDay.addItemListener(this);
    p1.add(chYear);
    p1.add(ln);
    p1.add(chMonth);
    p1.add(ly);
    p1.add(chDay);
    p1.add(ld);
    p1.add(b1);
    b1.addActionListener(this); } public void initZhong() {
    // TODO Auto-generated method stub
    Calendar cal = Calendar.getInstance();
    int hour = cal.get(Calendar.HOUR);
    int min = cal.get(Calendar.MINUTE);
    int sec = cal.get(Calendar.SECOND);
    p2.add(lz);
    p2.add(lss);
    lss.setText(hour+ "");
    p2.add(ls);
    p2.add(lff);
    lff.setText(min + "");
    p2.add(lf);
    p2.add(lmm);
    lmm.setText(sec + "");
    p2.add(lm);
    } public void initxia2() {
    // TODO Auto-generated method stub
    p3.add(p31, BorderLayout.WEST);
    p31.setLayout(new GridLayout(0, 7));
    String[] ss = { "日", "一", "二", "三", "四", "五", "六" };
    for (int i = 1; i < ss.length; i++) {
    week[i] = new JLabel(ss[i], JLabel.CENTER);
    p31.add(week[i]);
    }
    for (int i = 0; i < riqi.length; i++) {
    riqi[i] = new JLabel("", JLabel.CENTER);
    p31.add(riqi[i]);
    }
    } private void initXia1() {
    // TODO Auto-generated method stub
    p3.add(p32, BorderLayout.EAST);
    Integer year = Integer.parseInt(chYear.getSelectedItem());
    Integer month = Integer.parseInt(chMonth.getSelectedItem());
    Integer day = Integer.parseInt(chDay.getSelectedItem());
    p32.add(juli);
    p32.add(julih);
    julih.setText(year.toString());
    p32.add(nian);
    p32.add(nianh);
    nianh.setText(month.toString());
    p32.add(yue);
    p32.add(yueh);
    yueh.setText(day.toString());
    p32.add(ri);
    p32.add(rih);
    p32.add(tian);
    p32.add(tianh);
    p32.add(shi);
    p32.add(shih);
    p32.add(fen);
    p32.add(fenh);
    p32.add(miao);
    p32.add(miaoh);

    } public static void main(String[] args) {
    new Test03(); } @Override
    public void itemStateChanged(ItemEvent e) {
    // TODO Auto-generated method stub
    int year = Integer.parseInt(chYear.getSelectedItem());
    int month = Integer.parseInt(chMonth.getSelectedItem());
    int day = Integer.parseInt(chDay.getSelectedItem());
    Calendar cal = Calendar.getInstance();
    cal.set(year, month - 1, 1);
    int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
    int days = getDays(year, month);
    for (int i = 0; i < 42; i++) {
    riqi[i].setText("");
    }
    int index = 1;
    for (int i = dayofweek - 1; i < dayofweek - 1 + days; i++) {
    riqi[i].setText(String.valueOf(index));
    index++;
    }
    } public int getDays(int year, int month) {
    // TODO Auto-generated method stub
    int[] ss = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if ((month == 2)
    && (year % 4 == 0 || year % 400 == 0 && year % 100 != 0)) {
    return 29;
    }
    return ss[month];
    } @Override
    /*这个程序真的代码有点多,不是一下能改完的,
     * 这里仅帮你实现点击开始后显示距什么时候XX天,
     * 至于XX天XX时XX……你要自己算了
     * 提示:计时终点毫秒-现在毫秒=long; 可用这个long 来 new 一个 Date 或 Calendar;
     * 另外真正的计时还是自己写吧,最笨的方式也就是不断刷新,更好的方式要好好想罗
     */

    public void actionPerformed(ActionEvent e) {

    Integer year = Integer.parseInt(chYear.getSelectedItem());
    Integer month = Integer.parseInt(chMonth.getSelectedItem());
    Integer day = Integer.parseInt(chDay.getSelectedItem());
    p32.add(juli);
    p32.add(julih);
    julih.setText(year.toString());
    p32.add(nian);
    p32.add(nianh);
    nianh.setText(month.toString());
    p32.add(yue);
    p32.add(yueh);
    yueh.setText(day.toString());
    p32.add(ri);
    p32.add(rih);
    rih.setText(day.toString());
    p32.add(tian);
    p32.add(tianh); tian.setText(day.toString());
    p32.add(shi);
    p32.add(shih);
    shi.setText(day.toString());
    p32.add(fen);
    p32.add(fenh);
    fen.setText(day.toString());
    p32.add(miao);
    p32.add(miaoh);
    miao.setText(day.toString());


    }}