精华内容
下载资源
问答
  • #Java利用Calendar自制的万年历(含图形化界面) package MyDate; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax....

    #Java利用Calendar自制的万年历(含图形化界面)

    package MyDate;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    
    public class MyDate {
    	private int year;
    	private int month;
    	private int date;
    	private int day;
    	Calendar d;
    	public MyDate() {
    		d=Calendar.getInstance();
    		this.year=d.get(Calendar.YEAR);
    		this.month=d.get(Calendar.MONTH);
    		this.date=d.get(Calendar.DATE);	
    	}
    	public MyDate(int year,int month,int date) {
    		this.year=year;
    		this.month=(month-1);
    		this.date=date;
    	}
    	public String Myformat() {
    		d=Calendar.getInstance();
    		d.set(Calendar.DATE, 1);
    		d.set(Calendar.YEAR, this.year);
    		d.set(Calendar.MONTH, this.month);
    		int count=0;
    		this.day=d.get(Calendar.DAY_OF_WEEK)-1;
    		StringBuilder ss=new StringBuilder();
    		ss.append("一\t二\t三\t四\t五\t六\t日\n");
    		for(int i=1;i<this.day;i++) {
    			ss.append(" \t");
    			count++;
    		}
    		for(int i=1;i<=d.getActualMaximum(Calendar.DAY_OF_MONTH);i++){
    			if(i==this.date) {
    				ss.append("*"+i+"*\t");
    			}
    			else {
    			ss.append(i+"\t");
    			}
    			count++;
    			if(count%7==0) {
    				ss.append("\n");
    			}
    		}
    		String s=ss.toString();
    		return s;
    	}
    	public void menu() {
    			JFrame jf=new JFrame();
    			jf.setLayout(null);
    			jf.setSize(600,300);//设置整个面板的大小
    			jf.setVisible(true);//将整个面板设置为可见
    			JTextArea List=new JTextArea();//新建一个文本框
    			List.setBorder(BorderFactory.createTitledBorder(this.year+"年"+((this.month)+1)+"月"+this.date+"日"));//给这个文本框添加标题
    			jf.add(List);//将一个文本框加入面板之中
    			List.setBounds(10,10, 570, 350);//设置这个文本框的(x轴,y轴,长,宽)
    	        List.setEditable(false);
    	        List.setText((String)Myformat());
    	}
    }
    
    
    
    ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pLmxvbGkubmV0LzIwMTkvMDcvMjcvNWQzYmJhYjdhZDNhYjcwNTA0LnBuZw)
    
    展开全文
  • 这学期学了java,里面的图形用户界面方面的内容学习时,由于之前接触过Flash的AS3.0语言,对组件、监听、事件等上手比较快,在这一方面两者较为类似,需要多注意的是布局的学习应用。最后的结果是做了一个万年历,...

    
    

    这学期学了java,里面的图形用户界面方面的内容学习时,由于之前接触过Flash的AS3.0语言,对组件、监听、事件等上手比较快,在这一方面两者较为类似,需要多注意的是布局的学习应用。最后的结果是做了一个万年历,结果图如下:

                                                                   

    看似简单的界面还是有不少深坑的。

    这个万年历采用复杂网格布局(GridBagLayout),主要分为三个部分:

    1.初始化方法。要实现第一次进入万年历时默认显示2017年1月,随后调用时部分组件不用重复布局(后面会讲为什么要调用初始化方法)。

    2.响应事件。这个小程序一共安放了4个监听,分别加在“上月”、“下月”和两个年月值文本框(回车触发事件,用ActionEvent,非ItemEvent)。

    3.星期的计算函数。获取年月值后,计算当月1号是星期几。


    其中第三部分最容易理解,只要足够仔细,用getText获得年月值后,计算该年该月1号距离公元1 年1月1号(星期一)有多少天,对7取余不难得出结果。重点在于前两部分的设计和调试。


    为了叙述方便,在下文中我把每次翻月会改变的部分命名为A区域,即图中的日期值阿拉伯数字部分。

    显然,对于这个万年历,触发监听事件后需要更改的组件都是在A区域内,每次翻页只需要改变A区域即可。


    所以得出了一个很自然的设想:触发事件监听时,remove出所有日期值,再依次放入新的月份值的各个日期。即:

    监听翻页——>setText方法改变文本框的年月值——>remove掉A区域的组件——>获取年月值,自定义方法得到该月1号是星期几——>将“1”放到对应位置,后续依次排列

    因为初始化方法init()只写一个比较好,我尝试过在上述第五步的时候用新的初始化方法init_2(),但一没必要,二容易出错。只需要在一开始定义一个flag=0,完成初始的全部布局后flag=1,再加上合适的判断语句不难做到第五步调用初始化方法时只执行部分语句。

    在此先注意到remove(int index)方法,该方法需要一个参数,为组件的序号,组件序好取决于其放入的先后,如第3个放入的组件的序号是3,remove某一个组件后,序号在其后的组件的序号都会前移。所以在该程序中,只需要不断执行remove()若干次即可(得保证日期数字是最后放入的组件)。

    随后完成初步调试后发现,上述步骤都能执行,但是点击翻页后,remove成功了,但新加入的组件未显示,但加入检测语句却发现初始化方法是正常调用的。到这里我认为是重新调用add语句将组件放入这种语句不正确。直到我偶然中拖动了一下边框改变了程序框的大小,发现这时新加入的A区域能正常显示了,但A区域外的组件变回了默认的边界布局(A区域仍然是复杂网格布局),备份问价在我完成后删了,所以具体的错误界面请各位脑补吧= =、。


    由此引出了本次万年历设计过程中最大的两个问题:

    1.为什么新加入组件需要拖动改变外框大小才能得以显示?

    2.为什么调用一次初始化方法后,没对A区域外的组件干什么,但它们的原有布局会被破坏?


    对于上述两个问题,我在查阅相关资料,问了一些同学之后找到了解决办法。

    首先对于问题1:在完成组件的更换之后,Java要求界面得更新一下才能显示新的组件,我一开始使用的是repaint方法,但实际上这里要用的是validata方法。在监听方法调用初始化方法后加一句validata()就能解决这个问题。

    至于问题2,则是一开始的布局方法使用就有问题。我采用的是复杂网格布局,依次创建GridBagLayout和GridBagConstraints的类对象,并设置相关参数后,我原先是直接使用add(XX);这样的确可以放入,我查阅的书籍上样例也是如此,但这样会导致上文所说的错误。因为书籍的该部分讲的是复杂网格布局的应用样例,所以对于万年历这样的具体项目需要多想一层。解决办法也很简单,新建一个Panel:panel,将所有的组件放到panel内而不是直接进行布局,后面语句也应该用panel.add();这样一来,所有的组件均在panel内布局,此时A区域外的组件在重新调用初始化方法后布局不会被破坏,问题解决。

    新的布局方法片段:

    		GridBagLayout cal = new GridBagLayout();
    		GridBagConstraints cals = new GridBagConstraints();
    		setLayout(cal);
    		panel.setLayout(cal);
    		add(panel);
    		//“上月”按钮
    		cals.gridx = 1;
    		cals.gridy = 1;
    		cals.gridwidth = 2;
        	cals.gridheight = 7;
    		cal.setConstraints(last,cals);
    		panel.add(last,cals);
    		last.addActionListener(this);

    回看整个项目,其实主要问题就是这两个,一味的模仿书上的样例而不具体结合需求进行编写的话,迟早会遇到问题。而且在分析问题解决问题中学到的才是真正的本领。上面两点对于我们来说尤为重要。


    展开全文
  • 简单JAVA语言编写的万年历系统源码 直接就是Eclipse 工程 直接用 完美中文注释 适合刚入门JAVA程序员
  • java万年历和设计文档

    2019-03-15 13:47:49
    实现一个万年历,使用图形化界面,实现日期与星期的查询
  • java万年历

    2018-04-09 22:22:22
    打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),要求: (1)编写一个方法判断闰年; (2)编写一个方法判断某年某月有多少天; (3)编写一个方法计算某年某月前距离1900年1月1日的总天数; ...
  • 寻求自己做日历,运用java实行图形界面,是一个不错的选择
  • java万年历源程序

    2016-01-06 21:34:41
    java万年历源程序 适合课程设计 非常不错
  • Java万年历源代码

    2010-09-19 09:57:16
    Java实现的万年历源码,涉及到Java集合类、图形用于界面、多线程、异常等知识。
  • java课程设计--万年历设计 万年历设计万年历设计 摘要摘要 Java ...通过它可以实现对过去,现在以及 将来日期的查找,在开发的过程中,首先对相应的数据和图形界面初始,并获取 系统当前的年和月,如果要进行查找,可...

    3a5429672e603c333e817469066cd8b7.gifjava课程设计--万年历设计

    万年历设计万年历设计 摘要摘要 Java 语言自 1995 年面世以来,以其与平台无关性、安全性、面向对象等特 性被越来越多的人使用,是目前应用非常广泛的一门面向对象的程序设计语言, 本次课程设计的万年历是一个强大的日历系统,通过它可以实现对过去,现在以及 将来日期的查找,在开发的过程中,首先对相应的数据和图形界面初始化,并获取 系统当前的年和月,如果要进行查找,可以通过在年份对话框中输入要查询的年 份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。 本设计是对图形用户界面,布局管理器的综合运用,理解 JAVA 的时间处理 机制,编写独立运行的窗口。该万年历采用 Myeclipse 为基本开发环境和 java 语 言进行编写,首先可在短时间内建立系统应用原型,然后,对程序进行不断修正 和改进,直到形成可行系统。 关键词 java、面向对象、万年历 目录目录 1、前言 1 2、设计内容 1 3、设计过程 1 3.1 需求分析 . 1 3.2 概要设计. 1 3.3 详细设计. 2 3.4 代码实现. 4 3.5 运行结果. 8 4、总结 9 5、参考文献 .10 1 1、前言 Java 的体系结构由 Java 语言、Java class、Java API、Java 虚拟机组成。它具 有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java 支持多线程编程,Java 运行时系统在多线程同步方面具有成熟的解决方案。Java 的平台标准有 Java ME,Java SE 和 Java EE。Java 发展到今天,它的卓越成就及 在业界的地位毋庸置疑。 目前在众多的支持Java的开发工具中主要的工具有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper 和 Eclipse 等。其中 Java Development Kit 简称 JDK 是大多开发工具的基础。以上的每种开发工具都 有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬 件环境等因素来选择一种合适的开发工具。本次万年历就是通过 JAVA 语言来完 成的。 2、设计内容 万年历是一个强大的日历系统,通过它可以实现对过去,现在以及将来日期 的查找,通过在年份对话框中输入要查询的年份,再相应的在月份对应的下拉菜 单选择要查询的月份,则可得到相应的日历。本设计是对图形用户界面,布局管 理器的综合运用,理解 JAVA 的时间处理机制,编写独立运行的窗口。 3、设计过程 3.1 需求分析 本次设计的要求为通过使用图形用户界面,从而能够实现日期与星期的查 询。本程序的具体功能为如下几个方面 1能够实现图形界面 (2)能以月历形式显示日期与星期 (3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份 (4)通过点击“update”按钮来更新和刷新日历 3.2 概要设计 (1)总天数的算法首先用 if 语句判断定义年到输入年之间每一年是否为 2 闰年,是闰年,该年的总天数为 366,否则,为 365。然后判断输入的年是否为 定义年,若是,令总天数 S1,否则,用累加法计算出定义年到输入年之间的总 天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中 的月份并且该月还大于二月,再使总天数加 1,否则,不加,既算出从定义年一 月一日到输出年的该月一日的总天数。 (2) 输出月份第一天为星期几的算法使总天数除以 7 取余加 2 得几既为 星期几,若是 7,则为星期日。 (3)算出输出月份第一天为星期几的算法算出输出月份第一天为星期几 后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月 中的天数加上该月一日为星期几的数字再除以 7 得 0 换行, 即可完整的输出该月 的日历。 (4)如果年份小于 1582 年则程序不予判断。 3.3 详细设计 (1)流程图 3 图 1 程序流程图 (2)导入程序所需的类 import java.applet.Applet; import java.awt.*; import java.util.*; (3)初始化数据 public class WanNianLi extends Applet static final int TOP 70; //顶端距离 static final int CELLWIDTH50,CELLHEIGHT 30; //单元格尺寸 static final int MARGIN 3; //边界距离 static final int FEBRUARY 1; TextField tfYear new TextField“2

    展开全文
  • 有需要学习“万年历”思想的同仁,可以参考一下啊!界面内嵌有个人资料处理
  • (1)使用图形用户界面来查询用户所需的日期信息,符合日常软件使用规范。 (2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。 (3)并且添加了许多节日与星座等信息,界面采用日常的星期与月份...
  • 万年历 JAVA编写

    2011-04-05 21:48:16
    能实现万年历的基本功能,有图形用户界面设计,对初学者很有用处
  • import java.io.InputStreamReader; public class Work1 { // 判断字符串是否为数字 private static boolean isNumeric(String str) { // TODO Auto-generated method stub boolean flag = false; for(int i...

    问题

    在控制台输入一个年份和月份,在控制台输出这个月的日历。

    基本思路

    先计算某年某月的第一天距离1900.1.1的天数。然后用天数%7,就可以得到这一天是星期几。然后对这个月进行遍历存储在二维数组中。

    日期类

    package day06;
    
    public class Date {
    	private int year;
    	private int month;
    	
    	public Date(int year,int month) {
    		this.year = year;
    		this.month = month;
    	}
    	public Date() {
    		
    	}
    	public int setYear(int yesr	) {
    		return this.year = yesr;
    	}
    	public int setMonth(int month) {
    		return this.month = month;
    	}
    //	计算xx年xx月距离1900.1.1有多少天
    	public int  getDays() {
    		int days = 0;
    		for(int i = 1900; i<year;i++) {
    			if(i%4==0&&i%100!=0||i%400==0) {
    				days = days +366;
    			}
    			else {
    				days = days +365;
    			}
    		}
    		for(int i = 1;i<month;i++) {
    			days = days +this.getMonthDays(i);
    		}
    		return days+1;
    	}
    //	计算月份的天数
    	public int getMonthDays(int month) {
    		int monthDays = 0;
    		if(month==2) {
    			if(year%4==0&&year%100!=0||year%400==0) {
    				monthDays = monthDays+29;
    			}
    			else {
    				monthDays = monthDays+28;
    			}
    		}else if(month==4||month==6||month==9||month==11) {
    			monthDays = monthDays+30;
    		}else {
    			monthDays = monthDays+31;
    		}
    		return monthDays;
    	}
    //	将某月的日历放在二维数组中
    	public String[][] getRiLi() {
    		String[][] riLi = new String[7][7];
    		Integer m = 1;
    		riLi[0][0] = "\t日";	riLi[0][1]= "\t一";	riLi[0][2] = "\t二";
    		riLi[0][3] = "\t三";	riLi[0][4] = "\t四";	riLi[0][5] = "\t五";
    		riLi[0][6] = "\t六";
    		for(int j= 0;j<this.getDays()%7;j++) {
    			riLi[1][j] = "\t";
    		}
    		for(int j= this.getDays()%7;j<7;j++) {
    			riLi[1][j] ="\t"+m.toString();
    			m++;
    		}
    		for(int i = 2; i<7;i++) {
    			for(int j = 0;j<7;j++,m++) {
    				if(m>this.getMonthDays(month)) {
    					riLi[i][j] ="\t";
    				}
    				else {
    					riLi[i][j] ="\t"+m.toString();
    				}
    			}
    			
    		}
    		return riLi;
    	}
    
    
    }
    
    

    用户进行交互的控制台代码

    package day06;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    public class Work1 {
    //	判断字符串是否为数字
    	private static boolean isNumeric(String str) {
    		// TODO Auto-generated method stub
    		boolean flag = false;
    		for(int i =0 ; i<str.length();i++) {
    			char ch = str.charAt(i);
    			if (ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5' || ch == '6' || ch == '7'
    					|| ch == '8' || ch == '9') {
    				flag = true;
    			} else {
    				flag = false;
    				break;
    			}
    		}
    		return flag;
    	}
    	public static void main(String[] args) {
    		Date d1 = new Date();
    		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    		while (true) {
    			System.out.println("请输入要查询的年份月份或者输入退出结束程序。");
    			String str = null;
    			try {
    				str = in.readLine();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			String[] s = str.split(" ");
    			if (isNumeric(str)) {
    				Integer year = Integer.parseInt(s[0]);
    				Integer month = Integer.parseInt(s[1]);
    				if ((year > 1900) && (month >= 1 && month <= 12)) {
    					d1.setYear(year);
    					d1.setMonth(month);
    					String[][] rili = d1.getRiLi();
    					for (String[] k : rili) {
    						for (String v : k) {
    							System.out.print(v);
    						}
    						System.out.println();
    					}
    				} else {
    					System.out.print("输入错误");
    				}
    			} else if (str.equals("退出")) {
    				System.out.println("程序结束");
    				break;
    			} else {
    				System.out.println("输入错误");
    			}
    
    		}
    	}
    
    }
    
    
    展开全文
  • java万年历实现

    2012-08-05 20:04:47
    import java.util.*; public class calendar { public static void main(String[] args) { System.out.println("**************欢迎使用万年历************"); int year = 0; int month = 0...
  • 2013-2014学年第二学 学号 面向对象程序设计 课程设计报告 万年历系统题目 专业计算机科学与技术 级 班 姓名 号学 教导指 师 绩成 计算机与信息工程系 日6月6年...1使用图形用户界面来查询用用户所需的日期信息符合日常
  • javaSwing万年历小程序

    2018-05-20 15:00:14
    通过图形界面来显示万年历程序。能以月历形式显示日期与星期,支持用户自己输入年份,并提供月份的下拉组合框来选择月份,通过点击更新来刷新日历 具体年份从1900年到2100年甚至更多
  • 图形用户界面基础

    2013-06-17 11:16:55
    图形用户界面的设计, 实验目的 1. 掌握常用GUI控制组件的使用方法。 2. 掌握事件处理的方法。 3.了解swing控件的概念。
  • Java万年历源代码,可显示公历、农历、系统时间、国际时间,直接可以运行
  • JAVA编写的万年历源代码,可以输入时间直接让月份日期输出,没有图形界面
  • java课程设计万年历

    2010-07-03 01:44:19
    使用图形用户界面,实现日期与星期的查询 (界面很好,很值得学习的java程序)
  • java 实现万年历

    2017-04-14 15:31:00
    曾经初学java万年历,都是採用主要的算法求出是否闰年闰月 计算公式例如以下 int year = 2014, month = 8, total = 0; if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month ...
  • Java编写窗口万年历,用Java语言编写窗口万年历Java语言 编写 窗口JFrame 万年历
  • Java程序万年历源程序

    2010-01-03 22:25:24
    万年历使用java语言描写的源程序代码,并能实现查询功能
  • 万年历Java

    2012-05-07 00:46:51
    (1)通过网页形式运行,实现图形界面。 (2)能以月历形式显示日期与星期。 (3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。 (4)通过点击“更新”来刷新日历。
  • 一个用java实现的控制台万年历,可以显示当前的日历,也可以显示指定的日期的日历
  • 本程序功能:(1)通过Java编译器运行,实现图形界面。 (2)能以月历形式显示日期与星期。 (3)支持用户自己选择年份、月份及日期,并且所有的选择都是用下拉菜单的形式。 (4)通过点击“查看”来刷新日历。 ...
  • Tkinter图形界面的应用

    2021-03-25 02:08:08
    程序实现制作一个Tkinter图形界面日历(只显示阳历日期),用户选择某年某月,图形显示当月日历功能。运行效果运行效果如下 思路: OptionMenu可选菜单 from tkinter import * root = Tk() v = StringVar(root) ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

java万年历图形化界面

java 订阅