文本区中如何打印出如图的万年历?
代码我写了,可是不知如何放到文本区中,用append方法结果老出错,如何改更,才能变为如下结果?
-----------文-----------本----------区------------
========================================
*日 一 二 三 四 五 六* |1月
========================================
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
========================================
*日 一 二 三 四 五 六* |2月
========================================
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28
========================================
*日 一 二 三 四 五 六* |3月
========================================
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
========================================
*日 一 二 三 四 五 六* |4月
========================================
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
========================================
*日 一 二 三 四 五 六* |5月
========================================
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
========================================
*日 一 二 三 四 五 六* |6月
========================================
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
========================================
*日 一 二 三 四 五 六* |7月
========================================
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
========================================
*日 一 二 三 四 五 六* |8月
========================================
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
========================================
*日 一 二 三 四 五 六* |9月
========================================
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
========================================
*日 一 二 三 四 五 六* |10月
========================================
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
========================================
*日 一 二 三 四 五 六* |11月
========================================
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
========================================
*日 一 二 三 四 五 六* |12月
========================================
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
-----------文-----------本----------区------------
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class LeapyearTest extends Applet implements ActionListener {
Label result;
Label result1;
static TextArea txa;
TextField t1;
Button btn;
static int year;
boolean leap;
static int weekDay;
public void init() {
result = new Label( "请输入要判断的年份 ");
result1 = new Label();
t1 = new TextField(5);
btn = new Button( "判断 ");
txa = new TextArea( "万年历 ", 12, 36, TextArea.SCROLLBARS_VERTICAL_ONLY);
add(result);
add(t1);
add(btn);
add(result1);
add(txa);
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
year = Integer.parseInt(t1.getText());
t1.setText( " ");
if (year < 1) {
result1.setText( "输入的年份不能小于1! ");
return;
}
weekDay = (int) firstDayOfYear(year);
txa.append( " " + year + "年 ");
for (int i = 1; i <= 12; i++) {
printMonth(i);
System.out.println( "\n ");
}
}
public static void printMonth(int m) {
printHead(m);
int days = daysOfMonth(m);
for (int i = 1; i <= days; i++) {
if (i < 10)
System.out.print( " " + i);
else
System.out.print( " " + i);
weekDay = (weekDay + 1) % 7;
if (weekDay == 0) {
System.out.println();
System.out.print( " ");//控制2-6行
}
}
}
public static void printHead(int m) {
System.out.println( "======================================== ");
System.out.println( " *日 一 二 三 四 五 六* | " + m + "月 ");
System.out.println( "======================================== ");
for (int i = 0; i < weekDay; i++) {
System.out.print( " ");//控制第一行
}
}
public static long firstDayOfYear(int y) {
long n;
n = y * 365;
for (int i = 1; i < y; i++) {
if (isLeapYear(i))
n += 1;
}
return n %= 7;
}
public static 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;
}
public static boolean isLeapYear(int y) {
return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
}
[解决办法]
/**
* Calendar test
* @author
*
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LeapYearTest extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Label result;
TextArea txa;
TextField t1;
Button 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 Label( "year ");
t1 = new TextField(5);
t1.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char input = e.getKeyChar();
if (!Character.isDigit(input) && input != '\b ') {
e.consume();
}
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
});
btn = new Button( "judge ");
panel.add(result);
panel.add(t1);
panel.add(btn);
txa = new TextArea( " ", 12, 36, TextArea.SCROLLBARS_VERTICAL_ONLY);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(panel, "North ");
this.getContentPane().add(txa, "Center ");
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
year = Integer.parseInt(t1.getText());
t1.setText( " ");
if (year < 1) {
txa.setText( "year canot be less than 1! ");
return;
}
weekDay = (int) firstDayOfYear(year);
txa.append( " Calendar " + year + "\n ");
for (int i = 1; i <= 12; i++) {
printMonth(i);
//System.out.println( "\n ");
txa.append( "\n ");
}
}
private void printMonth(int m) {
printHead(m);
int days = daysOfMonth(m);
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);
}
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);
}
}