效果图如下:

 import java.awt.*;
import java.awt.event.*;
import java.util.*; import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*; public class MyCalendar extends JApplet
{
//定义星期天到星期六
public static final String WEEK_SUN = "周日";
public static final String WEEK_MON = "周一";
public static final String WEEK_TUE = "周二";
public static final String WEEK_WED = "周三";
public static final String WEEK_THU = "周四";
public static final String WEEK_FRI = "周五";
public static final String WEEK_SAT = "周六";
//设置背景颜色
public static final Color background = Color.white;
//设置前景颜色
public static final Color foreground = Color.black;
//设置题头星期的背景颜色和前景颜色
public static final Color headerBackground = Color.blue;
public static final Color headerForeground = Color.white;
//设置被选中的日期的背景颜色和前景颜色
public static final Color selectedBackground = Color.red;
public static final Color selectedForeground = Color.white; private JPanel cPane;
private JLabel yearsLabel;//年
private JSpinner yearsSpinner;//年调控
private JLabel monthsLabel;//月
private JComboBox monthsComboBox;//月下拉框
private JTable daysTable;//用来显示日期的table
private AbstractTableModel daysModel;
private Calendar calendar;
//构造方法初始化panel public MyCalendar()
{
cPane = (JPanel) getContentPane();
}
//初始化,对所有的空间进行布局
public void init()
{ cPane.setLayout(new BorderLayout()); //使用Border布局管理器
calendar = Calendar.getInstance(); //获取当前时间
calendar = Calendar.getInstance();
yearsLabel = new JLabel("Year: ");
yearsSpinner = new JSpinner();
yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner,"0000"));
yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
//增加监听 监听年份的改变
yearsSpinner.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent changeEvent)
{
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.YEAR,((Integer)yearsSpinner.getValue()).intValue());
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, day>maxDay?maxDay:day);
updateView();
}
}); JPanel yearMonthPanel = new JPanel();
cPane.add(yearMonthPanel,BorderLayout.NORTH);
yearMonthPanel.setLayout(new BorderLayout());
yearMonthPanel.add(new JPanel(),BorderLayout.CENTER);
JPanel yearPanel = new JPanel();
yearMonthPanel.add(yearPanel,BorderLayout.WEST);
yearPanel.setLayout(new BorderLayout());
yearPanel.add(yearsLabel,BorderLayout.WEST);
yearPanel.add(yearsSpinner,BorderLayout.CENTER); monthsLabel = new JLabel("Month: ");
//向月份下拉框中增加内容
monthsComboBox = new JComboBox();
for(int i=1; i<=12; i++)
{
monthsComboBox.addItem(new Integer(i));
}
monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
//监听月份的改变
monthsComboBox.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent actionEvevt) {
// TODO Auto-generated method stub
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.MONTH,monthsComboBox.getSelectedIndex());
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,day>maxDay?maxDay:day);
updateView();
}
}); JPanel monthPanel = new JPanel();
yearMonthPanel.add(monthPanel,BorderLayout.EAST);
monthPanel.setLayout(new BorderLayout());
monthPanel.add(monthsLabel,BorderLayout.WEST);
monthPanel.add(monthsComboBox,BorderLayout.CENTER); daysModel = new AbstractTableModel() { @Override
public Object getValueAt(int row, int column) {
// TODO Auto-generated method stub
if(row==0)
{
return getHeader(column);
}
row--;
Calendar calendar = (Calendar)MyCalendar.this.calendar.clone();
calendar.set(Calendar.DAY_OF_MONTH,1);
int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK)-1; //每个月第一天从哪一列开始
int index = row*7 + column;
int dayIndex = index - moreDayCount + 1;
if(index<moreDayCount||dayIndex>dayCount)
{
return null;
}
else
{
return new Integer(dayIndex);
}
}
//设置行7
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 7;
}
//设置列7
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 7;
}
};
daysTable = new CalendarTable(daysModel,calendar);
//设置每个cell可以被选中
daysTable.setCellSelectionEnabled(true);
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
daysTable.setDefaultRenderer(daysTable.getColumnClass(0),new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,Object value,
boolean isSelected,boolean hasFocus,int row,int column) {
String text = (value == null )? "" : value.toString();
JLabel cell = new JLabel(text);
cell.setOpaque(true);
if(row == 0)
{
cell.setForeground(headerForeground);
cell.setBackground(headerBackground);
}
else
{
if(isSelected)
{
cell.setForeground(selectedForeground);
cell.setBackground(selectedBackground);
}
else
{
cell.setForeground(foreground);
cell.setBackground(background);
}
}
return cell;
}
});
updateView();
cPane.add(daysTable,BorderLayout.CENTER);
} public static String getHeader(int index)
{
switch(index)
{
case 0:
return WEEK_SUN;
case 1:
return WEEK_MON;
case 2:
return WEEK_TUE;
case 3:
return WEEK_WED;
case 4:
return WEEK_THU;
case 5:
return WEEK_FRI;
case 6:
return WEEK_SAT;
default:
return null;
}
} public void updateView()
{
daysModel.fireTableDataChanged();
daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
calendar.get(Calendar.WEEK_OF_MONTH));
daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK)-1,
calendar.get(Calendar.DAY_OF_WEEK)-1);
}
//设置日历的table
public static class CalendarTable extends JTable
{
private Calendar calendar;
public CalendarTable(TableModel model,Calendar calendar)
{
super(model);
this.calendar = calendar;
}
public void changeSelection(int row,int column,boolean toggle,boolean extend)
{
super.changeSelection(row, column, toggle, extend);
if(row == 0)
{
return;
}
Object obj = getValueAt(row,column);
if(obj != null)
{
calendar.set(Calendar.DAY_OF_MONTH,((Integer)obj).intValue());
}
}
}
//让applet作为一个可执行的程序来运行
public static void main(String[] args)
{
JFrame frame = new JFrame("ShuBing日历");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyCalendar myCalendar = new MyCalendar();
myCalendar.init();
frame.getContentPane().add(myCalendar);
frame.setSize(300,200);
frame.setVisible(true);
}
}

JAVA日历的更多相关文章

  1. java日历显示年份、月份

    import java.util.Scanner;class CalendarMain{     //主函数入口    public static void main(String[] args)   ...

  2. java 日历代码实现

    System.out.println("请输入日期(按照格式:2030-3-10):"); //在控制台输入 //String str="2016-9-26"; ...

  3. java日历程序版本

    //MainFrame.java package com.huowolf.myCalender; import java.awt.BorderLayout; import java.awt.Color ...

  4. java日历类Calendar简单使用

    import java.util.Calendar; import java.util.TimeZone; public class Test1 { public static void main(S ...

  5. java 日历计算农历和节假日的工具类

    背景 业务需求需要后端提供这样的接口,网上找了很多java代码例子,虽然功能实现了 但是不完善,特别是节日那一块儿.然后百度发现有这样的插件,但是信息也是java后端提供的非js 然后在开源js插件找 ...

  6. java日历类(calendar),可输出年月日等等,以及和Date相互转化

    日历创建对象: Calendar类为抽象类,不可实例化 方式一: 父类引用指向类对象 Calendar  cal = new GregorianCalendar(); 方式二: Calendar ca ...

  7. java 日历类Calendar用法

    如何获取昨天?取昨天的日期,本想的截出来日期减一就好了.又一想不对,如果今天是一号怎么办? 现有两个办法 1: Date as = new Date(new Date().getTime()-24*6 ...

  8. 我编辑的JAVA日历程序

    class calendar { public static void main(String[]args) { int yearIn ; yearIn = Integer.parseInt(args ...

  9. JAVA上百实例源码以及开源项目

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...

随机推荐

  1. C++学习笔记(九):作用域和命名空间

    作用域 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域).变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号.也就是说,作用域由变 ...

  2. 学习和理解C#的委托

    去年自学C#用的教程是入门级的<学通C#的24堂课>,教材里面也没有提到委托和事件,工作中也没怎么用到.后来一次在网上看了一些大牛的博客,读完之后感觉懵懵懂懂,似懂非懂,过了两三天之后,却 ...

  3. PowerDesigner实用技巧小结(4)

    下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的.对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握.并逐步做到:在应用中发展,在发展中应用. 1. ...

  4. Java算法试题--猜字母/杀人游戏

    题目例如以下: 把abcd-s共19个字母组成的序列反复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a).以及第3个,第5个等全部奇数位置的字母. 得到的新串再进行删除奇 ...

  5. 辛星浅谈PHP的混乱的编码风格

    我们都知道.各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意全然兼容C的语法).编程风格上还是有些区别.比方非常典型的就是C++风格的单行凝视和C风格的多行凝视. 而尽管J ...

  6. web工作方式,浏览网页,打开浏览器,输入网址按下回车键,然后会显示出内容,这个过程是怎样的呢?

    以下内容摘自<Go Web编程>,介绍的通俗易懂. 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什 ...

  7. HDU 5493 Queue 树状数组

    Queue Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5493 Des ...

  8. SAP TAX CODE 自动计算税金(BAPI_ACC_DOCUMENT_POST CALCULATE_TAX_FROM_GROSSAMOUNT)

    CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT' EXPORTING i_bukrs = ' "公司代码 i_mwskz = 'X1' " ...

  9. C 栈 链式存储

    #ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_ typedef void LinkStack; LinkStack* LinkStack_Creat ...

  10. Linux 基础 —— RPM

    http://liaoph.com/linux-rpm/ 这篇文章主要讲 RPM 软件包管理器的使用. 软件包的演变史 最早期时,软件包是一些可以运行的程序组成的集合,可能还要加上若干配置文件和动态库 ...