Java實(shí)現(xiàn)窗體程序顯示日歷
本文實(shí)例為大家分享了Java實(shí)現(xiàn)窗體程序顯示日歷的具體代碼,供大家參考,具體內(nèi)容如下
實(shí)訓(xùn)要求:
1.使用BorderLayout 進(jìn)行總體布局
2.在North 位置放置包含兩個(gè)按鈕( 上月和下月)的Panel
3.在South 位置放置一個(gè)Label 用于顯示當(dāng)前年份和月份
4.在Center 位置放置一個(gè)顯示日歷的Panel
5.顯示日歷的Panel 設(shè)置7 行7 列的GridLayout 布局,其中第1行放置7個(gè)按鈕顯示周“幾”,其他6 行放置42 個(gè)Label 用于顯示期。
6.啟動程序時(shí)日歷中默認(rèn)顯示當(dāng)前月份的日歷。
7.點(diǎn)擊“上月”和“下月”可翻看上個(gè)月和下個(gè)月的日歷。
8.程序運(yùn)行結(jié)果如下圖:

代碼:
CalendaBean.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
?
import javax.swing.*;
public class CalendaBean implements ActionListener {
?? ?JLabel[] label;
?? ?JLabel now;
?? ?String[] day;
?? ?int year = 0, month = 0;
?? ?public void setYear(int year) {
?? ??? ?this.year = year;
?? ?}
?
?? ?public void setMonth(int month) {
?? ??? ?this.month = month;
?? ?}
?
?? ?public void actionPerformed(ActionEvent e) {
?? ??? ?String str = e.getActionCommand();
?? ??? ?if (str.equals("lastmonth")) {
?? ??? ??? ?month--;
?? ??? ??? ?if (month == 0) {
?? ??? ??? ??? ?month = 12;
?? ??? ??? ??? ?year--;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else if (str.equals("nextmonth")) {
?? ??? ??? ?month++;
?? ??? ??? ?if (month == 13) {
?? ??? ??? ??? ?month = 1;
?? ??? ??? ??? ?year++;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?now.setText("日歷:" + year + "年" + month + "月");
?? ??? ?String[] a = getCalendar();
?? ??? ?for (int i = 0; i < a.length; i++) {
?? ??? ??? ?label[i].setText(" ? ? ? ? ?"+a[i]);
?? ??? ?}
?? ??? ?
?? ?}
?
?? ?public String[] getCalendar() {
?? ??? ?String[] a = new String[42];
?? ??? ?Calendar rili = Calendar.getInstance();
?? ??? ?rili.set(year, month - 1, 1);
?? ??? ?int weekDay = rili.get(Calendar.DAY_OF_WEEK) - 1;
?? ??? ?int day = 0;
?? ??? ?if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
?? ??? ??? ??? ?|| month == 10 || month == 12) {
?? ??? ??? ?day = 31;
?? ??? ?}
?? ??? ?if (month == 4 || month == 6 || month == 9 || month == 11) {
?? ??? ??? ?day = 30;
?? ??? ?}
?? ??? ?if (month == 2) {
?? ??? ??? ?if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
?? ??? ??? ??? ?day = 29;
?? ??? ??? ?else
?? ??? ??? ??? ?day = 28;
?? ??? ?}
?? ??? ?for (int i = 0; i < weekDay; i++)
?? ??? ??? ?a[i] = " ";
?? ??? ?for (int i = weekDay, n = 1; i < weekDay + day; i++) {
?? ??? ??? ?a[i] = String.valueOf(n);
?? ??? ??? ?n++;
?? ??? ?}
?? ??? ?for (int i = weekDay + day; i < a.length; i++)
?? ??? ??? ?a[i] = " ";
?? ??? ?return a;
?? ?}
}Test.java
import java.awt.*;
import java.awt.event.*;
?
import javax.swing.*;
?
public class Test extends JFrame {
?? ?JButton b1, b2, b3, b4, b5, b6, b7, bx, by;
?? ?CalendaBean cb = new CalendaBean();
?? ?JLabel[] label;
?? ?JLabel now;
?
?? ?public static void main(String[] args) {
?? ??? ?Test frame = new Test();
?? ??? ?frame.setSize(500, 400);
?? ??? ?frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?? ??? ?frame.setTitle("日歷");
?? ??? ?frame.setVisible(true);
?
?? ?}
?
?? ?public Test() {
?? ??? ?int year, month;
?? ??? ?setLayout(new BorderLayout());
?? ??? ?JPanel pNorth = new JPanel();
?? ??? ?cb = new CalendaBean();
?? ??? ?cb.setYear(2017);
?? ??? ?cb.setMonth(11);
?? ??? ?String[] a = cb.getCalendar();
?? ??? ?bx = new JButton("上月");
?? ??? ?by = new JButton("下月");
?? ??? ?bx.setActionCommand("lastmonth");
?? ??? ?by.setActionCommand("nextmonth");
?? ??? ?bx.addActionListener(new ActionListener() {
?? ??? ??? ?public void actionPerformed(ActionEvent e) {
?? ??? ??? ??? ?cb.actionPerformed(e);
?? ??? ??? ?}
?? ??? ?});
?? ??? ?by.addActionListener(new ActionListener() {
?? ??? ??? ?public void actionPerformed(ActionEvent e) {
?? ??? ??? ??? ?cb.actionPerformed(e);
?? ??? ??? ?}
?? ??? ?});
?? ??? ?pNorth.add(bx);
?? ??? ?pNorth.add(by);
?? ??? ?add(pNorth, BorderLayout.NORTH);
?? ??? ?GridLayout grid = new GridLayout(7, 7);
?? ??? ?JPanel pCenter = new JPanel();
?? ??? ?b1 = new JButton("日");
?? ??? ?b2 = new JButton("一");
?? ??? ?b3 = new JButton("二");
?? ??? ?b4 = new JButton("三");
?? ??? ?b5 = new JButton("四");
?? ??? ?b6 = new JButton("五");
?? ??? ?b7 = new JButton("六");
?? ??? ?pCenter.add(b1);
?? ??? ?pCenter.add(b2);
?? ??? ?pCenter.add(b3);
?? ??? ?pCenter.add(b4);
?? ??? ?pCenter.add(b5);
?? ??? ?pCenter.add(b6);
?? ??? ?pCenter.add(b7);
?? ??? ?label = new JLabel[42];
?? ??? ?for (int i = 0; i < 42; i++) {
?? ??? ??? ?label[i] = new JLabel();
?? ??? ??? ?pCenter.add(label[i]);
?? ??? ?}
?? ??? ?cb.label = this.label;
?? ??? ?for (int i = 0; i < a.length; i++) {
?? ??? ??? ?label[i].setText(" ? ? ? ? ?"+a[i]);
?? ??? ?}
?? ??? ?pCenter.setLayout(grid);
?? ??? ?add(pCenter, BorderLayout.CENTER);
?? ??? ?JPanel pSouth = new JPanel();
?? ??? ?now = new JLabel();
?? ??? ?now.setText("日歷:" + cb.year + "年" + cb.month + "月");
?? ??? ?cb.now = now;
?? ??? ?pSouth.add(now);
?? ??? ?add(pSouth, BorderLayout.SOUTH);
?? ?}
?
}運(yùn)行結(jié)果:



以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
辨析Java中的String與StringBuffer及StringBuilder字符串類
這里將為大家來辨析Java中的String與StringBuffer及StringBuilder字符串類型,通常來說StringBuilder的性能更加,需要的朋友可以參考下2016-05-05
如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Dr
這篇文章主要介紹了如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Driver問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型+四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換
java中除了基本數(shù)據(jù)類型之外,剩下的都是引用數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型?+?四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2024-04-04
SpringBoot注冊web組件的實(shí)現(xiàn)方式
Servlet是Java Web應(yīng)用程序的基礎(chǔ),它提供了處理客戶端請求的機(jī)制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應(yīng)用程序的核心組件,本文將給大家介紹一下SpringBoot注冊web組件的實(shí)現(xiàn)方式,需要的朋友可以參考下2023-10-10
Java+MySQL實(shí)現(xiàn)圖書管理系統(tǒng)(完整代碼)
這篇文章主要介紹了Java+MySQL實(shí)現(xiàn)圖書管理系統(tǒng)(完整代碼),本文給大家介紹的非常想詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
教你安裝eclipse2021并配置內(nèi)網(wǎng)maven中心倉庫的圖文詳解
本文能通過圖文并茂的形式給大家介紹安裝eclipse2021并配置內(nèi)網(wǎng)maven中心倉庫的相關(guān)知識,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-09-09

