java gui 日历_java-公历日历GUI-问题

我必须为我的Java类制作一个功能齐全的日历,并且无法使用.我正在使用GregorianCalendar获取当前日,月,年等.我正在使用JButtons填充填写日历的42个字段,并在每个单独的JButton上发布月份的日期.我在将月份的第一天(七月)放入正确的JButton时遇到问题.日历将月份识别为7月,将年份识别为2012,但是它将星期一(而不是星期天)设置为1,并且相隔一周.这是我的代码,感谢您的帮助!

import java.awt.BorderLayout;

import java.awt.GridLayout;

import java.util.GregorianCalendar;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class Calendar extends JFrame {

public Calendar() {

this.setSize(800, 600);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.setVisible(true);

this.setTitle("Calendar");

JPanel borderPanel = new JPanel();

borderPanel.setLayout(new BorderLayout());

getContentPane().add(borderPanel);

// Initialize GregorianCalendar

GregorianCalendar cal = new GregorianCalendar();

int currYear = cal.get(GregorianCalendar.YEAR);

int currDOM = cal.get(GregorianCalendar.DAY_OF_MONTH);

int currMnth = cal.get(GregorianCalendar.MONTH);

String month2 = "";

switch (currMnth) {

case 0:

month2 = "January";

break;

case 1:

month2 = "February";

break;

case 2:

month2 = "March";

break;

case 3:

month2 = "April";

break;

case 4:

month2 = "May";

break;

case 5:

month2 = "June";

break;

case 6:

month2 = "July";

break;

case 7:

month2 = "August";

break;

case 8:

month2 = "September";

break;

case 9:

month2 = "October";

break;

case 10:

month2 = "November";

break;

case 11:

month2 = "December";

break;

}

int nod, som;

nod = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); //Number of Days

som = cal.get(GregorianCalendar.DAY_OF_WEEK_IN_MONTH); // Start of the Month

// Button Layout

final int ROWS = 6;

final int COLS = 7;

JButton[][] days;

JPanel calendar = new JPanel();

calendar.setLayout(new GridLayout(6, 7));

days = new JButton[ROWS][COLS];

for (int row = 0; row < ROWS; row++) {

for (int col = 0; col < COLS; col++) {

days[row][col] = new JButton("");

calendar.add(days[row][col]);

}

}

// Add Some Number to the Buttons

int[] tableMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int startDay = som;

int daysInMonth = tableMonth[currMnth];

for (int i = 0; i < daysInMonth; i++) {

days[(startDay + i) / 7][(startDay + i) % 7].setText("" + (i + 1));

}

borderPanel.add(calendar, BorderLayout.CENTER);

// North Panel - Current Month / Prev & Next Button

JPanel month = new JPanel();

month.add(new JButton("Previous"));

month.add(new JLabel(month2));

month.add(new JButton("Next"));

borderPanel.add(month, BorderLayout.NORTH);

// West Panel - Current Date

JPanel year = new JPanel();

year.add(new JButton("The Year is: " + currYear));

borderPanel.add(year, BorderLayout.SOUTH);

// South Panel - Current Year

JPanel today = new JPanel();

today.add(new JButton("Today is: " + month2 + " " + currDOM + ", " + currYear));

borderPanel.add(today, BorderLayout.WEST);

}

public static void main(String[] args) {

new Calendar();

}

}

最佳答案

我将与GUI部分分开来解决程序的逻辑部分,然后使用逻辑部分.我将使用SimpleDateFormat来获取特殊的日历字符串,例如月份和星期几.例如:

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

public class MyCalendar {

private static final SimpleDateFormat MONTH_FORMAT = new SimpleDateFormat("MMMM");

private static final SimpleDateFormat DAY_OF_WEEK_FORMAT = new SimpleDateFormat("EEEE");

private static final SimpleDateFormat MY_DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");

public static void main(String[] args) {

GregorianCalendar cal = new GregorianCalendar(2012, Calendar.JANUARY, 1);

for (int j = 0; j < 24; j++) {

Date date = cal.getTime();

System.out.println("Date: " + MY_DATE_FORMAT.format(date));

int year = cal.get(Calendar.YEAR);

System.out.println("year := " + year);

int month = cal.get(Calendar.MONTH);

System.out.printf("month number: %d, month name: %s%n", month, MONTH_FORMAT.format(date));

int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

System.out.printf("day of week: %d, day of week string: %s%n", dayOfWeek, DAY_OF_WEEK_FORMAT.format(date));

int maxDaysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

System.out.println("maxDaysInMonth := " + maxDaysInMonth);

cal.add(Calendar.MONTH, 1);

System.out.println();

}

System.out.println("Today!");

cal = new GregorianCalendar(); // today!

Date date = cal.getTime();

System.out.println("Date: " + MY_DATE_FORMAT.format(date));

int year = cal.get(Calendar.YEAR);

System.out.println("year := " + year);

int month = cal.get(Calendar.MONTH);

System.out.printf("month number: %d, month name: %s%n", month, MONTH_FORMAT.format(date));

int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

System.out.printf("day of week: %d, day of week string: %s%n", dayOfWeek, DAY_OF_WEEK_FORMAT.format(date));

int maxDaysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

System.out.println("maxDaysInMonth := " + maxDaysInMonth);

cal.add(Calendar.MONTH, 1);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值