参考:http://community.csdn.net/Expert/TopicView.asp?id=5383638 /** * Calendar test 根据年份,打印该年日历 * @author * */ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.TextArea; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Calendar; import java.util.GregorianCalendar;
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField;
public class LeapYearTest extends JFrame implements ActionListener { /** * */ private static final long serialVersionUID = 1L;
JLabel result;
TextArea txa;
JTextField t1;
JButton btn; int year;
boolean leap;
int weekDay;
public LeapYearTest() { super("Calendar Test");
setSize(280, 700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(dimension.width / 2 - 140, dimension.height / 2 - 350);
JPanel panel = new JPanel(); result = new JLabel("year"); t1 = new JTextField(5); t1.setToolTipText("input the year > 0"); btn = new JButton("generate");
t1.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { char input = e.getKeyChar(); if(input == ‘\n‘) generate(); else if (!Character.isDigit(input) && input != ‘\b‘) { e.consume(); }else{ btn.setEnabled(true); } } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }); btn.setToolTipText("Generate the year " + t1.getText() + " Calendar"); btn.setEnabled(false); panel.add(result); panel.add(t1); panel.add(btn);
txa = new TextArea("", 12, 36, TextArea.SCROLLBARS_VERTICAL_ONLY); txa.setEditable(false); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(panel, "North"); this.getContentPane().add(txa, "Center"); btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e) { generate(); }
private void generate() { System.out.println(t1.getText()); if(t1.getText() == null || t1.getText().equals("")){ return; } year = Integer.parseInt(t1.getText()); t1.setText(""); if (year < 1) { txa.setText("year canot be less than 1!"); return; } else txa.setText(" Calendar Year:" + year + "\n"); weekDay = (int) firstDayOfYear(year); for (int i = 1; i <= 12; i++) { printMonth(i); //System.out.println("\n"); txa.append("\n"); } t1.setText(""); btn.setEnabled(false); } private void printMonth(int m) { printHead(m); int days = daysOfMonth(m); Calendar calendar = new GregorianCalendar(); for (int i = 1; i <= days; i++) { if (i < 10) { //System.out.print(" " + i); txa.append(" " + i); } else { //System.out.print(" " + i); txa.append(" " + i); } if(m == calendar.get(Calendar.MONTH)+1 && i == calendar.get(Calendar.DAY_OF_MONTH)) txa.append("*"); weekDay = (weekDay + 1) % 7; if (weekDay == 0) { //System.out.println(); txa.append("\n"); //System.out.print("");// 控制2-6行 //txa.append(""); } } }
private void printHead(int m) {
//System.out.println("========================================"); //System.out.println(" *日 一 二 三 四 五 六* " + m + "月"); //System.out.println("========================================");
txa.append("========================================\n"); txa.append(" 日 一 二 三 四 五 六 " + m + "月\n"); txa.append("========================================\n"); for (int i = 0; i < weekDay; i++) { //System.out.print(" ");// 控制第一行 txa.append(" "); } }
private long firstDayOfYear(int y) { long n; n = y * 365; for (int i = 1; i < y; i++) { if (isLeapYear(i)) n += 1; } return n %= 7; }
private int daysOfMonth(int m) { switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) return 29; else return 28; } return weekDay; }
private boolean isLeapYear(int y) { return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0); }
public static void main(String[] args) { LeapYearTest test = new LeapYearTest(); test.setVisible(true); test.setAlwaysOnTop(true); //test.setExtendedState(JFrame.MAXIMIZED_BOTH); JFrame.setDefaultLookAndFeelDecorated(true); } }
|