Java编写程序,输入年份,输出本年度各月份日历

Python057

Java编写程序,输入年份,输出本年度各月份日历,第1张

写了个简明的,

import java.util.Calendar

import java.util.Scanner

public class Test {

static public void main(String 参数[]){

Calendar c = Calendar.getInstance()

Scanner sc = new Scanner(System.in)

System.out.println("请输入年份:")

int year= sc.nextInt()

c.set(Calendar.YEAR, year)

c.set(Calendar.MONTH, Calendar.JANUARY)

c.set(Calendar.DAY_OF_MONTH, 1)

while(c.get(Calendar.YEAR)==year){

int wday=c.get(Calendar.DAY_OF_WEEK)

int mday=c.get(Calendar.DAY_OF_MONTH)

if(mday==1){

System.out.println("\n日\t一\t二\t三\t四\t五\t六\t第"+(c.get(Calendar.MONTH)+1)+"月")

System.out.println("---------------------------------------------------")

for(int i=0i<wday-1i++) System.out.print(" \t")

}

System.out.print(mday+"\t")

if(wday==7) System.out.println()

c.add(Calendar.DAY_OF_YEAR, 1)

}

}

}

=======

请输入年份:

2012

日 一 二 三 四 五 六 第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 29

日 一 二 三 四 五 六 第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.util.Date

import java.util.Calendar

import java.text.DateFormat

import java.text.SimpleDateFormat

import java.text.ParseException

import java.awt.Color

import java.awt.Font

import java.awt.Point

import java.awt.Dimension

import java.awt.BorderLayout

import java.awt.FlowLayout

import java.awt.GridLayout

import java.awt.Cursor

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.JButton

import javax.swing.JDialog

import javax.swing.JPanel

import javax.swing.JLabel

import javax.swing.JSpinner

import javax.swing.SpinnerNumberModel

import javax.swing.SwingUtilities

import javax.swing.SwingConstants

import javax.swing.event.ChangeListener

import javax.swing.event.ChangeEvent

import javax.swing.border.LineBorder

/**

* @company:NEUSOFT

* @Title:日期选择控件

* @Description:在原有基础上修改了以下内容:

* 1. 将容器由Frame改为了Dialog,以便在基于对话框的程序中也能够使用

* 2. 将最小日期由1980改为了1950,考虑到目前球员的出生日期可能早于1980年

* 3. 将初始显示格式设置为 yyyy年MM月dd日 格式,原有的小时去掉了,不适合于出生日期字段

*/

public class DateChooserJButton extends JButton {

private DateChooser dateChooser = null

private String preLabel = ""

public DateChooserJButton() {

this(getNowDate())

}

public DateChooserJButton(SimpleDateFormat df, String dateString) {

this()

setText(df, dateString)

}

public DateChooserJButton(Date date) {

this("", date)

}

public DateChooserJButton(String preLabel, Date date) {

if (preLabel != null)

this.preLabel = preLabel

setDate(date)

setBorder(null)

setCursor(new Cursor(Cursor.HAND_CURSOR))

addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (dateChooser == null)

dateChooser = new DateChooser()

Point p = getLocationOnScreen()

p.y = p.y + 30

dateChooser.showDateChooser(p)

}

})

}

private static Date getNowDate() {

return Calendar.getInstance().getTime()

}

private static SimpleDateFormat getDefaultDateFormat() {

return new SimpleDateFormat("yyyy年MM月dd日")

}

// 覆盖父类的方法

public void setText(String s) {

Date date

try {

date = getDefaultDateFormat().parse(s)

} catch (ParseException e) {

date = getNowDate()

}

setDate(date)

}

public void setText(SimpleDateFormat df, String s) {

Date date

try {

date = df.parse(s)

} catch (ParseException e) {

date = getNowDate()

}

setDate(date)

}

public void setDate(Date date) {

super.setText(preLabel + getDefaultDateFormat().format(date))

}

public Date getDate() {

String dateString = this.getText().substring(preLabel.length())

try {

return getDefaultDateFormat().parse(dateString)

} catch (ParseException e) {

return getNowDate()

}

}

public String getDateString()

{

Date birth =getDate()

DateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd")

return formatDate.format(birth).toString()

//return this.getText().substring(preLabel.length())

}

// 覆盖父类的方法使之无效

//public void addActionListener(ActionListener listener) {

//}

private class DateChooser extends JPanel implements ActionListener,

ChangeListener {

int startYear = 1950// 默认【最小】显示年份

int lastYear = 2050// 默认【最大】显示年份

int width = 200// 界面宽度

int height = 200// 界面高度

Color backGroundColor = Color.gray// 底色

// 月历表格配色----------------//

Color palletTableColor = Color.white// 日历表底色

Color todayBackColor = Color.orange// 今天背景色

Color weekFontColor = Color.blue// 星期文字

Color dateFontColor = Color.black// 日期文字色

Color weekendFontColor = Color.red// 周末文字色

// 控制条配色------------------//

Color controlLineColor = Color.pink// 控制条底色

Color controlTextColor = Color.white// 控制条标签文字色

Color rbFontColor = Color.white// RoundBox文字色

Color rbBorderColor = Color.red// RoundBox边框色

Color rbButtonColor = Color.pink// RoundBox按钮色

Color rbBtFontColor = Color.red// RoundBox按钮文字色

JDialog dialog

JSpinner yearSpin

JSpinner monthSpin

JSpinner hourSpin

JButton[][] daysButton = new JButton[6][7]

DateChooser() {

setLayout(new BorderLayout())

setBorder(new LineBorder(backGroundColor, 2))

setBackground(backGroundColor)

JPanel topYearAndMonth = createYearAndMonthPanal()

add(topYearAndMonth, BorderLayout.NORTH)

JPanel centerWeekAndDay = createWeekAndDayPanal()

add(centerWeekAndDay, BorderLayout.CENTER)

}

private JPanel createYearAndMonthPanal() {

Calendar c = getCalendar()

int currentYear = c.get(Calendar.YEAR)

int currentMonth = c.get(Calendar.MONTH) + 1

int currentHour = c.get(Calendar.HOUR_OF_DAY)

JPanel result = new JPanel()

result.setLayout(new FlowLayout())

result.setBackground(controlLineColor)

yearSpin = new JSpinner(new SpinnerNumberModel(currentYear,

startYear, lastYear, 1))

yearSpin.setPreferredSize(new Dimension(48, 20))

yearSpin.setName("Year")

yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"))

yearSpin.addChangeListener(this)

result.add(yearSpin)

JLabel yearLabel = new JLabel("年")

yearLabel.setForeground(controlTextColor)

result.add(yearLabel)

monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1,

12, 1))

monthSpin.setPreferredSize(new Dimension(35, 20))

monthSpin.setName("Month")

monthSpin.addChangeListener(this)

result.add(monthSpin)

JLabel monthLabel = new JLabel("月")

monthLabel.setForeground(controlTextColor)

result.add(monthLabel)

hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23,

1))

hourSpin.setPreferredSize(new Dimension(35, 20))

hourSpin.setName("Hour")

hourSpin.addChangeListener(this)

result.add(hourSpin)

JLabel hourLabel = new JLabel("时")

hourLabel.setForeground(controlTextColor)

result.add(hourLabel)

return result

}

private JPanel createWeekAndDayPanal() {

String colname[] = { "日", "一", "二", "三", "四", "五", "六" }

JPanel result = new JPanel()

// 设置固定字体,以免调用环境改变影响界面美观

result.setFont(new Font("宋体", Font.PLAIN, 12))

result.setLayout(new GridLayout(7, 7))

result.setBackground(Color.white)

JLabel cell

for (int i = 0i <7i++) {

cell = new JLabel(colname[i])

cell.setHorizontalAlignment(JLabel.RIGHT)

if (i == 0 || i == 6)

cell.setForeground(weekendFontColor)

else

cell.setForeground(weekFontColor)

result.add(cell)

}

int actionCommandId = 0

for (int i = 0i <6i++)

for (int j = 0j <7j++) {

JButton numberButton = new JButton()

numberButton.setBorder(null)

numberButton.setHorizontalAlignment(SwingConstants.RIGHT)

numberButton.setActionCommand(String

.valueOf(actionCommandId))

numberButton.addActionListener(this)

numberButton.setBackground(palletTableColor)

numberButton.setForeground(dateFontColor)

if (j == 0 || j == 6)

numberButton.setForeground(weekendFontColor)

else

numberButton.setForeground(dateFontColor)

daysButton[i][j] = numberButton

result.add(numberButton)

actionCommandId++

}

return result

}

private JDialog createDialog(JDialog owner) {

JDialog result = new JDialog(owner, "日期时间选择", true)

result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE)

result.getContentPane().add(this, BorderLayout.CENTER)

result.pack()

result.setSize(width, height)

return result

}

void showDateChooser(Point position) {

JDialog owner = (JDialog) SwingUtilities

.getWindowAncestor(DateChooserJButton.this)

if (dialog == null || dialog.getOwner() != owner)

dialog = createDialog(owner)

dialog.setLocation(getAppropriateLocation(owner, position))

flushWeekAndDay()

dialog.setVisible(true)

}

Point getAppropriateLocation(JDialog owner, Point position) {

Point result = new Point(position)

Point p = owner.getLocation()

int offsetX = (position.x + width) - (p.x + owner.getWidth())

int offsetY = (position.y + height) - (p.y + owner.getHeight())

if (offsetX >0) {

result.x -= offsetX

}

if (offsetY >0) {

result.y -= offsetY

}

return result

}

private Calendar getCalendar() {

Calendar result = Calendar.getInstance()

result.setTime(getDate())

return result

}

private int getSelectedYear() {

return ((Integer) yearSpin.getValue()).intValue()

}

private int getSelectedMonth() {

return ((Integer) monthSpin.getValue()).intValue()

}

private int getSelectedHour() {

return ((Integer) hourSpin.getValue()).intValue()

}

private void dayColorUpdate(boolean isOldDay) {

Calendar c = getCalendar()

int day = c.get(Calendar.DAY_OF_MONTH)

c.set(Calendar.DAY_OF_MONTH, 1)

int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK)

int i = actionCommandId / 7

int j = actionCommandId % 7

if (isOldDay)

daysButton[i][j].setForeground(dateFontColor)

else

daysButton[i][j].setForeground(todayBackColor)

}

private void flushWeekAndDay() {

Calendar c = getCalendar()

c.set(Calendar.DAY_OF_MONTH, 1)

int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH)

int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK)

for (int i = 0i <6i++) {

for (int j = 0j <7j++) {

String s = ""

if (dayNo >= 1 &&dayNo <= maxDayNo)

s = String.valueOf(dayNo)

daysButton[i][j].setText(s)

dayNo++

}

}

dayColorUpdate(false)

}

public void stateChanged(ChangeEvent e) {

JSpinner source = (JSpinner) e.getSource()

Calendar c = getCalendar()

if (source.getName().equals("Hour")) {

c.set(Calendar.HOUR_OF_DAY, getSelectedHour())

setDate(c.getTime())

return

}

dayColorUpdate(true)

if (source.getName().equals("Year"))

c.set(Calendar.YEAR, getSelectedYear())

else

// (source.getName().equals("Month"))

c.set(Calendar.MONTH, getSelectedMonth() - 1)

setDate(c.getTime())

flushWeekAndDay()

}

public void actionPerformed(ActionEvent e) {

JButton source = (JButton) e.getSource()

if (source.getText().length() == 0)

return

dayColorUpdate(true)

source.setForeground(todayBackColor)

int newDay = Integer.parseInt(source.getText())

Calendar c = getCalendar()

c.set(Calendar.DAY_OF_MONTH, newDay)

setDate(c.getTime())

}

}

}

这是一个专门的选日期的类 ,你看看完了调用就行了