【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学会员整理了Java开源代码-CalendarDemo.java的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
package chp07;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class CalendarDemo extends JApplet {
// 定义星期天到星期六
public static final String SUN = "周日";
public static final String MON = "周一";
public static final String TUE = "周二";
public static final String WED = "周三";
public static final String THU = "周四";
public static final String FRI = "周五";
public static final String SAT = "周六";
// 设置背景颜色
public static final Color background = new Color(240, 255, 255);
// 设置前景颜色
public static final Color foreground = new Color(128, 138, 135);
// 设置题头星期的背景颜色和前景颜色
public static final Color H_Background = new Color(240, 255, 240);
public static final Color H_Foreground = new Color(61, 89, 171);
// 设置被选中的日期的背景颜色和前景颜色
public static final Color selectedBackground = new Color(245, 222, 179);
public static final Color selectedForeground = new Color(255, 97, 0);
private JPanel pan;
private JLabel year_Label; // 年
private JSpinner year_Spinner; // 年调控
private JLabel month_Label; // 月
private JComboBox month_ComboBox; // 月下拉框
private JTable table; // 用来显示日期的table
private AbstractTableModel model;
private Calendar calendar;
// 构造方法 初始化panel
public CalendarDemo() {
pan = (JPanel) getContentPane();
}
// 初始化,对所有的空间进行布局。
public void init() {
pan.setLayout(new BorderLayout());
// 使用border布局管理器
calendar = Calendar.getInstance();
year_Label = new JLabel("年份: ");
year_Spinner = new JSpinner();
year_Spinner.setEditor(new JSpinner.NumberEditor(year_Spinner, "0000"));
year_Spinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
// 增加监听 监听年份的改变
year_Spinner.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) year_Spinner.getValue())
.intValue());
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar
.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
change_View();
}
});
JPanel Y_Mpanel = new JPanel();
pan.add(Y_Mpanel, BorderLayout.NORTH);
Y_Mpanel.setLayout(new BorderLayout());
Y_Mpanel.add(new JPanel(), BorderLayout.CENTER);
JPanel Y_Panel = new JPanel();
Y_Mpanel.add(Y_Panel, BorderLayout.WEST);
Y_Panel.setLayout(new BorderLayout());
Y_Panel.add(year_Label, BorderLayout.WEST);
Y_Panel.add(year_Spinner, BorderLayout.CENTER);
month_Label = new JLabel("月份: ");
// 向月份下拉框中增加内容
month_ComboBox = new JComboBox();
for (int i = 1; i <= 12; i++) {
month_ComboBox.addItem(" " + new Integer(i) + " ");
}
month_ComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
// 监听月份的改变
month_ComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, month_ComboBox.getSelectedIndex());
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar
.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
change_View();
}
});
JPanel M_Panel = new JPanel();
Y_Mpanel.add(M_Panel, BorderLayout.EAST);
M_Panel.setLayout(new BorderLayout());
M_Panel.add(month_Label, BorderLayout.WEST);
M_Panel.add(month_ComboBox, BorderLayout.CENTER);
model = new AbstractTableModel() { // 创建AbstractTableModel对象,必须实现getRowCount,getColumnCount和getValueAt这三个方法
// 设置行7
public int getRowCount() { // 返回表格行的个数
return 7;
}
// 设置列7
public int getColumnCount() { // 返回表格列的个数
return 7;
}
public Object getValueAt(int row, int column) { // 返回 row 和 column
// 之间的单元格值。
if (row == 0) {
return getHeader(column);
}
row--;
Calendar calendar = (Calendar) CalendarDemo.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);
}
}
};
table = new CalendarTable(model, calendar);
// 设置每个cell可以被选中
//table.setRowHeight(25);
table.setCellSelectionEnabled(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setDefaultRenderer(table.getColumnClass(0),
new TableCellRenderer() {
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(H_Foreground);
cell.setBackground(H_Background);
} else {
if (isSelected) {
cell.setForeground(selectedForeground);
cell.setBackground(selectedBackground);
} else {
cell.setForeground(foreground);
cell.setBackground(background);
}
}
return cell;
}
});
change_View();
pan.add(table);
}
public static String getHeader(int index) {
switch (index) {
case 0:
return SUN;
case 1:
return MON;
case 2:
return TUE;
case 3:
return WED;
case 4:
return THU;
case 5:
return FRI;
case 6:
return SAT;
default:
return null;
}
}
public void change_View() {
model.fireTableDataChanged();// 对表格中的单元格进行侦听
table.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),// 选择两参数间的行
calendar.get(Calendar.WEEK_OF_MONTH));
table.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);// 获取row行,column列间的值
if (obj != null) {
calendar.set(Calendar.DAY_OF_MONTH, ((Integer) obj).intV
上一篇:
CalendarDateType.java
下一篇:
形容词、副词的比较级 ——中考典型试题例析