用java編寫日歷添加窗口一角_Java 實訓4 編寫一個窗體程序顯示日歷

實訓要求:

1.使用BorderLayout?進行總體布局

2.在North?位置放置包含兩個按鈕(?上月和下月)的Panel

3.在South?位置放置一個Label?用于顯示當前年份和月份

4.在Center?位置放置一個顯示日歷的Panel

5.顯示日歷的Panel?設置7?行7?列的GridLayout?布局,其中第1行放置7

個按鈕顯示周“幾”,其他6?行放置42?個Label?用于顯示期。

6.啟動程序時日歷中默認顯示當前月份的日歷。

7.點擊“上月”和“下月”可翻看上個月和下個月的日歷。

8.程序運行結果如下圖:

ed6b9f9720d492ef3f563c9a23a77137.png

代碼:

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);

}

}

運行結果:

bdb39b30ddac70f5c866ad2c5f8dfc48.png

a74d502fc81fe8559f017b568aafdbde.png

3289f11cd8ef703930b508898f638ed8.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537939.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537939.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ER圖轉換成關系模式集的規則

轉自己博客園文章 A與B1&#xff1a;1 在A表里把B表的主鍵和關系的屬性加入到A表中 或B表里把A表的主鍵和關系的屬性加入到B表中 舉例 男人表身份證號姓名年齡女人身份證號登記日期女人表身份證號姓名年齡 A與B1:N 在A表中加入B表的主鍵與關系的屬性 小米公司納稅號公司全稱…

Grafana文檔(在Centos / Redhat上安裝)

在基于RPM的Linux上安裝&#xff08;CentOS&#xff0c;Fedora&#xff0c;OpenSuse&#xff0c;RedHat&#xff09; 描述下載CentOS / Fedora / OpenSuse / Redhat Linux穩定版本x86-64CentOS / Fedora / OpenSuse / Redhat Linux穩定版本ARM64CentOS / Fedora / OpenSuse / R…

python3數字類型分為_Python初學3——數字類型及操作

一、數1.1 整數類型( 十、二、八、十六進制 )python中整數類型與數學中的整數概念一致&#xff0c;有正有負&#xff0c;取值任意。整數的表示形式&#xff1a;整數類型表示形式舉例十進制34,163,210二進制0b1101 或 0B1101八進制0o357 或 0O357十六進制0x45ac 或 0X45ac1.2 浮…

idea 2018.1 創建springboot開啟找回Run Dashboard

原文連接&#xff1a;https://www.cnblogs.com/yangtianle/p/8818255.html ---------------------------------------------------------------------------------配置方法首先找到項目中.idea文件下的workspace.xml開打接下來找到<component name"RunDashboard"&…

wepack構建工具

神TMc css重要性 程序猿 感嘆

php獲取藍湊云文件列表,php調用藍奏云下載接口

/*** package Lanzou* author Filmy* version 1.2.1* link https://mlooc.cn*/header(Access-Control-Allow-Origin:*);header(Content-Type:application/json; charsetutf-8);$url isset($_GET[url]) ? $_GET[url] : "";$pwd isset($_GET[pwd]) ? $_GET[pwd] : …

微信支付-服務端-bug排查記錄

微信支付服務端需要對微信官方的統一下單接口發送請求獲取prepayId作為app端調用支付的憑證&#xff0c;如果返回簽名錯誤&#xff0c;首先排查代碼層面的錯誤。 方法&#xff1a;使用微信官方的簽名算法檢驗。 地址&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/jsapi.…

.Net Core+mySqlSugar的一些稍復雜操作

介紹一些我嘗試的mysqlSugar的數據庫操作 修改密碼 var status db.Update<Users>(new { password user.password }, it > it.username user.username); 更新數據&#xff08;防止空值一起更新&#xff09; 首先封裝一個函數&#xff08;判斷是否為空或者數值為0&a…

nginx一個server多個servername

nginx server_name 多個的話&#xff0c;空格隔開就行

php根據漢字首字母分組,利用PHP獲取漢字首字母并且分組排序詳解

前言本文主要給大家介紹了關于PHP獲取漢字首字母并分組排序的相關內容&#xff0c;因經常我們在做項目的時候&#xff0c;會有按首字母排序的需求 比如&#xff1a; 美團的城市選擇 http://www.meituan.com/index/changecity/initiative app中按字母搜索正題網上找了各種&#…

[算法總結] 13 道題搞定 BAT 面試——字符串

本文首發于我的個人博客&#xff1a;尾尾部落 1. KMP 算法 談到字符串問題&#xff0c;不得不提的就是 KMP 算法&#xff0c;它是用來解決字符串查找的問題&#xff0c;可以在一個字符串&#xff08;S&#xff09;中查找一個子串&#xff08;W&#xff09;出現的位置。KMP 算法…

Sqlserver備份存儲過程

查了網上找不到快速備份Sqlserver存儲過程的方法&#xff0c;心里想&#xff0c;如果Sqlserver不自帶這個功能&#xff0c;真是太low了。步驟1&#xff1a;打開存儲過程文件夾步驟2&#xff1a;按 F7 鍵&#xff0c;打開“對象資源管理器詳細信息”窗口步驟3&#xff1a;點擊“…

仿拉鉤app(一)---爬蟲數據準備

工欲善其事必先利其器&#xff0c;準備做一個拉鉤的app&#xff0c;但是沒數據可怎么辦&#xff0c;那就直接扒褲衩去爬吧 一般爬蟲的思路為&#xff1a; 分析頁面結構是否有接口模仿請求&#xff08;解決反爬的各種方式&#xff09;解析數據存儲數據按照以上的思路&#xff0c…

小哼買書JAVA編寫,04_小哼買書

現在來看一個具體的例子“小哼買書”(根據全國青少年信息學奧林匹克聯賽 NOIP2006 普及組第一題改編),來實踐一下 章所學的三種排序算法。Paste_Image.png小哼的學校要建立一個圖書角,老師派小哼去找一些同學做調查,看看同學們都喜歡讀哪些書。小哼讓每個同學寫出一個自己最想讀…

[Err] 22007 - [SQL Server]從 nvarchar 數據類型到 datetime 數據類型的轉換產生一個超出范圍的值。

報錯語句&#xff1a; cast(Replace(Replace(P.DeliverDate,.,-),/,-) as datetime)改為 cast(Replace(Replace(P.DeliverDate,.,-),/,-) as datetime2)使用 datetime2 代替 datetime

linux Postfix + dovecot + extmail + extman + mysql

配置環境&#xff1a;RHEL5.5 i386DNS MX[rootstation40 ~]# host -t MX tianyun.comtianyun.com mail is handled by 10 mail.tianyun.com.[rootstation40 ~]# [rootstation40 ~]# ping mail.tianyun.comPING mail.tianyun.com (192.168.0.2) 56(84) bytes of data.64 bytes f…

php 接口安全解決方案,php接口數據安全解決方案(一)

前言目的&#xff1a;1.實現前后端代碼分離&#xff0c;分布式部署2.利用token替代session實現狀態保持&#xff0c;token是有時效性的滿足退出登錄&#xff0c;token存入redis可以解決不同服務器之間session不同步的問題&#xff0c;滿足分布式部署3.利用sign&#xff0c;前端…

Teamview連接Windows server問題

場景&#xff1a; 服務器在集團總部杭州&#xff0c;網管在集團寧波分公司&#xff0c;連接服務器通過內網遠程桌面。過程&#xff1a; 網管給了tv的賬號&#xff0c;密碼。連接的時候一直連不上去。卡在“正在初始化連接參數”。后來網管不信&#xff0c;遠程桌面了下&#xf…

nginx An attempt was made to access a socket in a way forbidden by its access permissions

在安裝了 sqlserver2008 的win7 與 win2008 上啟動 nginx&#xff0c;綁定80端口&#xff0c;報錯&#xff1a; nginx An attempt was made to access a socket in a way forbidden by its access permissions查了百度&#xff0c;說修改注冊表&#xff0c;但我的電腦上找不到文…

php codesniffer 代碼規范,規范三:PHP_CodeSniffer 輔佐代碼規范

>也可以參考此文&#xff1a;https://www.cnblogs.com/huangbx/p/php_codesniffer.html[TOC]我用的是wamp&#xff0c;環境是php7.0.23# (一)下載 pear打開http://pear.php.net/go-pear.phar&#xff0c;會顯示代碼&#xff0c;不用管他&#xff0c;直接copys復制到本地&…