您的位置:首页 > 产品设计 > UI/UE

GUI实现万年历

2016-04-19 19:30 489 查看
“`

package com.westos.javase.lesson08;

import java.awt.BorderLayout;

import java.awt.Choice;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.Label;

import java.awt.Menu;

import java.awt.MenuBar;

import java.awt.MenuItem;

import java.awt.Panel;

import java.awt.Toolkit;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.Calendar;

import java.util.Random;

public class MyCalendar extends Frame {

Panel pNorth = new Panel();
Panel pCenter = new Panel();
Label[] ls = new Label[42];
Label ly = new Label("年");
Label lm = new Label("月");
Choice chYear = new Choice();
Choice chMonth = new Choice();

public MyCalendar() {
setTitle("我的万年历");
setSize(300, 350);
//初始化菜单
initMenu();

//初始化中间日期面板
initCenter();

//初始化北部面板
initNorth();

//关闭窗口
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

});

}

private void initCenter() {
pCenter.setLayout(new GridLayout(0,7));
//标题
String[] tips = {"日","一","二","三","四","五","六"};
for (int i = 0; i < tips.length; i++) {
Label lt = new Label(tips[i],Label.CENTER);
lt.setFont(new Font("黑体", Font.BOLD, 14));
lt.setBackground(new Color(0x799ad1));
pCenter.add(lt);
}

//日期信息
Random r = new Random();
for (int i = 0; i < ls.length; i++) {
ls[i] = new Label(String.valueOf(i),Label.CENTER);
ls[i].setBackground(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
pCenter.add(ls[i]);
}
add(pCenter);
}

/**
* 北部面板
*/
private void initNorth() {
pNorth.setBackground(new Color(0xcaecf0));

//当前年月
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)  + 1;

for(int i = 1970;i <= 2050;i++) {
chYear.addItem(String.valueOf(i));
}

chYear.select(String.valueOf(year));

for(int i = 1;i <= 12 ;i++) {
chMonth.addItem(String.valueOf(i));
}
chMonth.select(String.valueOf(month));

pNorth.add(chYear);
pNorth.add(ly);
pNorth.add(chMonth);
pNorth.add(lm);

//为下拉列表添加监听
ChoiceItemListener lisn = new ChoiceItemListener();
chYear.addItemListener(lisn);
chMonth.addItemListener(lisn);

add(pNorth,BorderLayout.NORTH);

lisn.setCalendarDispay(); //启动后就显示当月日历
}

/**
* 初始化菜单
*/
private void initMenu() {
//菜单
MenuBar mb = new MenuBar();  //菜单条
Menu m1 = new Menu("查看");
Menu m2 = new Menu("编辑");
Menu m3 = new Menu("帮助");

MenuItem mt11 = new MenuItem("文件");
MenuItem mt12 = new MenuItem("打开");
MenuItem mt13 = new MenuItem("关闭");
m1.add(mt11);
m1.add(mt12);
m1.add(mt13);

MenuItem mt21 = new MenuItem("复制");
MenuItem mt22 = new MenuItem("粘贴");
MenuItem mt23 = new MenuItem("剪切");
m2.add(mt21);
m2.add(mt22);
m2.add(mt23);

MenuItem mt31 = new MenuItem("主题");
MenuItem mt32 = new MenuItem("关于");
m3.add(mt31);
m3.add(mt32);

mb.add(m1);
mb.add(m2);
//mb.add(m3);
m2.addSeparator(); //分隔符
m2.add(m3);  //二级菜单
setMenuBar(mb); //设置窗口的菜单
}

public static void main(String[] args) {
MyCalendar  cal =   new MyCalendar();
//窗口居中
Dimension di = Toolkit.getDefaultToolkit().getScreenSize(); //获取屏幕大小
System.out.println(di.width + "*" + di.height);
int x = (di.width - cal.getWidth()) / 2;
int y = (di.height - cal.getHeight()) / 2;
cal.setLocation(x, y);

cal.setVisible(true);
}

/**
* 下拉列表的事件监听器
* @author Administrator
*
*/
class ChoiceItemListener implements ItemListener {

@Override
public void itemStateChanged(ItemEvent e) {
setCalendarDispay();
}

private void setCalendarDispay() {
//System.out.println("change....");
//取出选择的年月
int year = Integer.parseInt(chYear.getSelectedItem());
int month = Integer.parseInt(chMonth.getSelectedItem());

//计算当月有多少天
int days = getDaysOfMonth(year, month);

//当月1号是星期几
Calendar cal = Calendar.getInstance();
cal.set(year,month - 1,1);
int week = cal.get(Calendar.DAY_OF_WEEK);  // 日:1,一:2,六:7

//days = cal.getActualMaximum(Calendar.DATE);  //获取当月的天数
//清空所有标签
for (int i = 0; i < ls.length; i++) {
ls[i].setText("");
}

//生成日期
int j = 1;
for(int i = week - 1;i < week - 1 + days;i++ ) {  //i代表是开始Label在ls数组中的索引
ls[i].setText(String.valueOf(j++));
}
}

/**
*
* @param year
* @param moth
* @return
*/
public int getDaysOfMonth(int year,int month) {
int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
if(month == 2 && isLeapYear(year)) {
return 29;
}

return days[month - 1];
}

/**
* 判断是否为闰年
* @param year
* @return
*/
public boolean isLeapYear(int year) {
return year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
}
}


}

“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: