java 日历_JAVA日历

1 import java.awt.*;2 import java.awt.event.*;3 import java.util.*;4

5 import javax.swing.*;6 import javax.swing.event.*;7 import javax.swing.table.*;8

9 public class MyCalendar extendsJApplet10 {11 //定义星期天到星期六

12 public static final String WEEK_SUN = "周日";13 public static final String WEEK_MON = "周一";14 public static final String WEEK_TUE = "周二";15 public static final String WEEK_WED = "周三";16 public static final String WEEK_THU = "周四";17 public static final String WEEK_FRI = "周五";18 public static final String WEEK_SAT = "周六";19 //设置背景颜色

20 public static final Color background =Color.white;21 //设置前景颜色

22 public static final Color foreground =Color.black;23 //设置题头星期的背景颜色和前景颜色

24 public static final Color headerBackground =Color.blue;25 public static final Color headerForeground =Color.white;26 //设置被选中的日期的背景颜色和前景颜色

27 public static final Color selectedBackground =Color.red;28 public static final Color selectedForeground =Color.white;29

30 privateJPanel cPane;31 private JLabel yearsLabel;//年

32 private JSpinner yearsSpinner;//年调控

33 private JLabel monthsLabel;//月

34 private JComboBox monthsComboBox;//月下拉框

35 private JTable daysTable;//用来显示日期的table

36 privateAbstractTableModel daysModel;37 privateCalendar calendar;38 //构造方法初始化panel

39

40 publicMyCalendar()41 {42 cPane =(JPanel) getContentPane();43 }44 //初始化,对所有的空间进行布局

45 public voidinit()46 {47

48 cPane.setLayout(new BorderLayout()); //使用Border布局管理器

49 calendar = Calendar.getInstance(); //获取当前时间

50 calendar =Calendar.getInstance();51 yearsLabel = new JLabel("Year: ");52 yearsSpinner = newJSpinner();53 yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner,"0000"));54 yearsSpinner.setValue(newInteger(calendar.get(Calendar.YEAR)));55 //增加监听 监听年份的改变

56 yearsSpinner.addChangeListener(newChangeListener()57 {58 public voidstateChanged(ChangeEvent changeEvent)59 {60 int day =calendar.get(Calendar.DAY_OF_MONTH);61 calendar.set(Calendar.DAY_OF_MONTH, 1);62 calendar.set(Calendar.YEAR,((Integer)yearsSpinner.getValue()).intValue());63 int maxDay =calendar.getActualMaximum(Calendar.DAY_OF_MONTH);64 calendar.set(Calendar.DAY_OF_MONTH, day>maxDay?maxDay:day);65 updateView();66 }67 });68

69 JPanel yearMonthPanel = newJPanel();70 cPane.add(yearMonthPanel,BorderLayout.NORTH);71 yearMonthPanel.setLayout(newBorderLayout());72 yearMonthPanel.add(newJPanel(),BorderLayout.CENTER);73 JPanel yearPanel = newJPanel();74 yearMonthPanel.add(yearPanel,BorderLayout.WEST);75 yearPanel.setLayout(newBorderLayout());76 yearPanel.add(yearsLabel,BorderLayout.WEST);77 yearPanel.add(yearsSpinner,BorderLayout.CENTER);78

79 monthsLabel = new JLabel("Month: ");80 //向月份下拉框中增加内容

81 monthsComboBox = newJComboBox();82 for(int i=1; i<=12; i++)83 {84 monthsComboBox.addItem(newInteger(i));85 }86 monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));87 //监听月份的改变

88 monthsComboBox.addActionListener(newActionListener() {89

90 @Override91 public voidactionPerformed(ActionEvent actionEvevt) {92 //TODO Auto-generated method stub

93 int day =calendar.get(Calendar.DAY_OF_MONTH);94 calendar.set(Calendar.DAY_OF_MONTH,1);95 calendar.set(Calendar.MONTH,monthsComboBox.getSelectedIndex());96 int maxDay =calendar.getActualMaximum(Calendar.DAY_OF_MONTH);97 calendar.set(Calendar.DAY_OF_MONTH,day>maxDay?maxDay:day);98 updateView();99 }100 });101

102

103 JPanel monthPanel = newJPanel();104 yearMonthPanel.add(monthPanel,BorderLayout.EAST);105 monthPanel.setLayout(newBorderLayout());106 monthPanel.add(monthsLabel,BorderLayout.WEST);107 monthPanel.add(monthsComboBox,BorderLayout.CENTER);108

109 daysModel = newAbstractTableModel() {110

111 @Override112 public Object getValueAt(int row, intcolumn) {113 //TODO Auto-generated method stub

114 if(row==0)115 {116 returngetHeader(column);117 }118 row--;119 Calendar calendar = (Calendar)MyCalendar.this.calendar.clone();120 calendar.set(Calendar.DAY_OF_MONTH,1);121 int dayCount =calendar.getActualMaximum(Calendar.DAY_OF_MONTH);122 int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK)-1; //每个月第一天从哪一列开始

123 int index = row*7 +column;124 int dayIndex = index - moreDayCount + 1;125 if(indexdayCount)126 {127 return null;128 }129 else

130 {131 return newInteger(dayIndex);132 }133 }134 //设置行7

135 @Override136 public intgetRowCount() {137 //TODO Auto-generated method stub

138 return 7;139 }140 //设置列7

141 @Override142 public intgetColumnCount() {143 //TODO Auto-generated method stub

144 return 7;145 }146 };147 daysTable = newCalendarTable(daysModel,calendar);148 //设置每个cell可以被选中

149 daysTable.setCellSelectionEnabled(true);150 daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);151 daysTable.setDefaultRenderer(daysTable.getColumnClass(0),newTableCellRenderer() {152 @Override153 publicComponent getTableCellRendererComponent(JTable table,Object value,154 boolean isSelected,boolean hasFocus,int row,intcolumn) {155 String text = (value == null )? "": value.toString();156 JLabel cell = newJLabel(text);157 cell.setOpaque(true);158 if(row == 0)159 {160 cell.setForeground(headerForeground);161 cell.setBackground(headerBackground);162 }163 else

164 {165 if(isSelected)166 {167 cell.setForeground(selectedForeground);168 cell.setBackground(selectedBackground);169 }170 else

171 {172 cell.setForeground(foreground);173 cell.setBackground(background);174 }175 }176 returncell;177 }178 });179 updateView();180 cPane.add(daysTable,BorderLayout.CENTER);181 }182

183 public static String getHeader(intindex)184 {185 switch(index)186 {187 case 0:188 returnWEEK_SUN;189 case 1:190 returnWEEK_MON;191 case 2:192 returnWEEK_TUE;193 case 3:194 returnWEEK_WED;195 case 4:196 returnWEEK_THU;197 case 5:198 returnWEEK_FRI;199 case 6:200 returnWEEK_SAT;201 default:202 return null;203 }204 }205

206 public voidupdateView()207 {208 daysModel.fireTableDataChanged();209 daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),210 calendar.get(Calendar.WEEK_OF_MONTH));211 daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK)-1,212 calendar.get(Calendar.DAY_OF_WEEK)-1);213 }214 //设置日历的table

215 public static class CalendarTable extendsJTable216 {217 privateCalendar calendar;218 publicCalendarTable(TableModel model,Calendar calendar)219 {220 super(model);221 this.calendar =calendar;222 }223 public void changeSelection(int row,int column,boolean toggle,booleanextend)224 {225 super.changeSelection(row, column, toggle, extend);226 if(row == 0)227 {228 return;229 }230 Object obj =getValueAt(row,column);231 if(obj != null)232 {233 calendar.set(Calendar.DAY_OF_MONTH,((Integer)obj).intValue());234 }235 }236 }237 //让applet作为一个可执行的程序来运行

238 public static voidmain(String[] args)239 {240 JFrame frame = new JFrame("ShuBing日历");241 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);242 MyCalendar myCalendar = newMyCalendar();243 myCalendar.init();244 frame.getContentPane().add(myCalendar);245 frame.setSize(300,200);246 frame.setVisible(true);247 }248 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值