Java——编写桌面日历

news/2025/3/4 14:35:46/

问题描述:

       编写一个程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter的中放置49个标签,用来显示日历。窗口北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth按钮,单击nextMonth,可以显示当前月的下一个月的日历;单击previousMonth按钮,可以显示当前月的上一个月的日历。窗口的南面添加一个Panel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。请完成界面设计和相关功能。运行结果如下图所示。

问题解决:

新建Java项目,在项目下新建package,命名为Calendar。

CalendarBean.java

package Calendar;import java.util.Calendar;
public class CalendarBean
{ String  day[];int year=2018,month=0;public void setYear(int year){    this.year=year;}public int getYear(){   return year;}public void setMonth(int month){    this.month=month;}public int getMonth(){    return month;}public String[] getCalendar(){   String a[]=new String[42];    Calendar 日历=Calendar.getInstance();日历.set(year,month-1,1);            int 星期几=日历.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=星期几,n=1;i<星期几+day;i++){a[i]=String.valueOf(n) ;n++;} return a;}
}

CalendarFrame.java

package Calendar;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class CalendarFrame extends Frame implements ActionListener
{    Label labelDay[]=new Label[42];Button titleName[]=new Button[7];String name[]={"日","一","二","三", "四","五","六"};Button nextMonth,previousMonth;int year=2020,month=5;CalendarBean calendar;Label showMessage=new Label("",Label.CENTER);public CalendarFrame(){  Panel pCenter=new Panel();pCenter.setLayout(new GridLayout(7,7)); //将pCenter的布局设置为7行7列的GridLayout 布局。for(int i=0;i<7;i++){  titleName[i]=new Button(name[i]);pCenter.add(titleName[i]);//pCenter添加组件titleName[i]。}for(int i=0;i<42;i++){labelDay[i]=new Label("",Label.CENTER);pCenter.add(labelDay[i]);//pCenter添加组件labelDay[i]。}calendar=new  CalendarBean();calendar.setYear(year);calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){  labelDay[i].setText(day[i]);}nextMonth=new Button("下月");previousMonth=new Button("上月");nextMonth.addActionListener(this);previousMonth.addActionListener(this);Panel pNorth=new Panel(),pSouth=new Panel();pNorth.add(previousMonth);pNorth.add(nextMonth);pSouth.add(showMessage);showMessage.setText("日历:"+calendar.getYear()+"年"+ calendar.getMonth()+"月" );ScrollPane scrollPane=new ScrollPane();scrollPane.add(pCenter);add(scrollPane,BorderLayout.CENTER);// 窗口添加scrollPane在中心区域add(pNorth,BorderLayout.NORTH);//  窗口添加pNorth 在北面区域add(pSouth,BorderLayout.SOUTH);// 窗口添加pSouth 在南区域。}public void actionPerformed(ActionEvent e){  if(e.getSource()==nextMonth){ month=month+1;if(month>12) {month=1;year++;}calendar.setYear(year);calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){ labelDay[i].setText(day[i]);}}else if(e.getSource()==previousMonth){ month=month-1;if(month<1) {month=12;year--;}calendar.setYear(year);calendar.setMonth(month);String day[]=calendar.getCalendar();for(int i=0;i<42;i++){  labelDay[i].setText(day[i]);}}showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );}
}

CalendarMainClass.java

package Calendar;
public class CalendarMainClass
{ public static void main(String args[]){   CalendarFrame frame=new CalendarFrame();frame.setBounds(100,100,360,300);frame.setVisible(true);frame.validate();frame.addWindowListener(new java.awt.event.WindowAdapter(){  public void windowClosing(java.awt.event.WindowEvent e){  System.exit(0);}});}
}

运行结果:


http://www.ppmy.cn/news/570946.html

相关文章

潘鹏整理WPF(10)日历控件CalendarDatePicker

Calendar DisplayMode”Month”&#xff0c;然后选择某个月份后就依然如上图 如第一张图中是9月但是显示了8月的30和31号&#xff0c;DisplayDateStart”2015-9”可以去掉 如第一张图中是9月但是显示了10月1-10号&#xff0c;DisplayDateEnd”2015-9-30”可以去掉 西方…

FullCalendar日历插件说明文档

好记忆不如按烂笔头... ... 普通显示设置 属性描述默认值header设置日历头部信息。 如果设置为false&#xff0c;则不显示头部信息。包括left&#xff0c;center,right左中右三个位置&#xff0c;每个位置都可以对应以下不同的配置&#xff1a; title: 显示当前月份/周/日信息 …

Echarts:有趣的calendar-实现日历图

Echarts是一个开源的可视化图表库&#xff0c;支持丰富的图表&#xff0c;官网中还有大量示例可以选择使用、参考。 其中比较有趣的就是calendar&#xff0c;calendar是一个坐标系&#xff0c;这个坐标系与一般的直角坐标系不同&#xff0c;日历坐标系是根据日历的布局来显示数…

material-calendarview日历控件

这篇blog带来一个不错的日历控件&#xff0c;是github上的一个开源库&#xff01; 先来看基础的 Basic Example 布局文件很简单activity_basic.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.a…

透明桌面日历的制作

[愚翁专栏]中有一个 如何用C#做一个类似于桌面插件的程序 的例子&#xff0c;拿来实际演练了一下&#xff0c;发现只是实现一个界面而已&#xff0c;只有没有日历的内容。但是这勾起了我的兴趣&#xff0c;决定自己做一个。 在http://www.codeproject.com/cs/miscctrl/MonthCa…

MySQL全表扫描一定存在性能问题吗?

查找表中的一行数据&#xff0c;数据库有几种实现方法&#xff1f; 答案是两种&#xff0c;全表扫描或者索引查找。 全表扫描就是通过读取整个表中的数据获取查询结果&#xff0c;这种方式最大的问题就是随着数据量的增长&#xff0c;扫描磁盘数据的性能急剧下降。对于 MySQL…

Spring Cloud - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

目录 一、Nacos 安装和配置 二、Nacos 服务注册发现 2.1、将服务注册到 nacos 中 2.2、执行效果 三、Nacos 的服务分级模型及配置 3.1、分级模型 3.2、配置集群 3.3、配置 Nacos 负载均衡策略 3.4、Nacos 服务实例的权重设置 3.5、环境隔离——namespace 四、Nacos注…

JavaScript的基础语法

JavaScript的基础语法 &#x1f50e;编写第一个HelloWorld行内式内嵌式外部式 &#x1f50e;注释&#x1f50e;consoloe.log()利用consoloe.log()打印HelloWorld &#x1f50e;基础语法变量变量的使用动态类型 &#x1f50e;基础数据类型&#x1f50e;运算符算术运算符复合赋值…