写一个JAVA程序实现一个简单的日历(高分)(加分)

导入Java . awt . *;

导入Java . awt . event . *;

导入Java . util . *;

导入javax . swing . *;

导入javax . swing . event . *;

导入javax . swing . table . *;

公共类MyCalendar扩展JApplet {

public static final String WEEK _ SUN = " SUN ";

公共静态最终字符串WEEK _ MON = " MON

public static final String WEEK _ TUE = " TUE ";

public static final String WEEK _ WED = " WED ";

public static final String WEEK _ THU = " THU ";

public static final String WEEK _ FRI = " FRI ";

public static final String WEEK _ SAT = " SAT ";

公共静态最终颜色背景= Color.white

公共静态最终颜色前景= Color.black

public static final Color header background = Color . blue;

public static final Color header foreground = Color . white;

公共静态最终颜色selectedBackground = Color.blue

公共静态最终颜色selectedForeground = Color . white;

私人JPanel cPane

private JLabel yearsLabel

二等兵JSpinner yearsSpinner

私人JLabel monthsLabel

private JComboBox months combobox;

私有JTable daysTable

私有AbstractTableModel daysModel

私人日历日历;

公共MyCalendar() {

cPane =(JPanel)getContentPane();

}

public void init() {

cpane . set layout(new BorderLayout());

calendar = calendar . getinstance();

calendar = calendar . getinstance();

years label = new JLabel(" Year:");

years spinner = new JSpinner();

yearsSpinner.setEditor(新JSpinner。NumberEditor(yearsSpinner,“0000”);

years spinner . setvalue(new Integer(Calendar . get(Calendar。年)));

years spinner . addchangelistener(new change listener(){

public void state changed(change event change event){

int day = calendar.get(日历。月日);

calendar.set(日历。月日,1);

calendar.set(日历。YEAR,((Integer) yearsSpinner.getValue())。int value());

int maxDay = Calendar . getactualmaximum(Calendar。月日);

calendar.set(日历。一个月中的某一天,day & gtmaxDay?maxDay:day);

update view();

}

});

JPanel yearMonthPanel = new JPanel();

cPane.add(yearMonthPanel,BorderLayout。北);

yearmonthpanel . set layout(new BorderLayout());

yearMonthPanel.add(new JPanel(),BorderLayout)。中心);

JPanel year panel = new JPanel();

yearMonthPanel.add(yearPanel,BorderLayout。西);

year panel . set layout(new BorderLayout());

yearPanel.add(yearsLabel,BorderLayout。西);

yearPanel.add(yearsSpinner,BorderLayout。中心);

months label = new JLabel(" Month:");

months combobox = new JComboBox();

for(int I = 1;我& lt= 12;i++) {

monthsComboBox.addItem(新整数(I));

}

months combobox . setselectedindex(Calendar . get(Calendar。月));

months combobox . addactionlistener(new action listener(){

public void action performed(ActionEvent ActionEvent){

int day = calendar.get(日历。月日);

calendar.set(日历。月日,1);

calendar.set(日历。MONTH,months combobox . getselectedindex());

int maxDay = Calendar . getactualmaximum(Calendar。月日);

calendar.set(日历。一个月中的某一天,day & gtmaxDay?maxDay:day);

update view();

}

});

JPanel month panel = new JPanel();

yearMonthPanel.add(monthPanel,BorderLayout。东);

month panel . set layout(new BorderLayout());

monthPanel.add(monthsLabel,BorderLayout。西);

monthPanel.add(monthsComboBox,BorderLayout。中心);

days model = new AbstractTableModel(){

public int getRowCount() {

return 7;

}

public int getColumnCount() {

return 7;

}

公共对象getValueAt(int row,int column) {

if (row == 0) {

返回get header(column);

}

行-;

日历Calendar =(Calendar)my Calendar . this . Calendar . clone();

calendar.set(日历。月日,1);

int day count = Calendar . getactualmaximum(Calendar。月日);

int moreDayCount = Calendar . get(Calendar。星期几)-1;

int index = row * 7+column;

int day index = index-moreDayCount+1;

if(index & lt;moreDayCount | | dayIndex & gt天数){

返回null

}否则{

返回新的整数(day index);

}

}

};

day stable = new calendar table(days model,calendar);

day stable . setcellselectionenabled(true);

day stable . setselectionmode(ListSelectionModel。单选);

day stable . setdefaultrenderer(day stable . get column class(0),new TableCellRenderer() {

公共组件getTableCellRendererComponent(JTable表,对象值,布尔值isSelected,

boolean hasFocus,int row,int column) {

String text = (value == null)?" ":value . tostring();

JLabel cell = new JLabel(text);

cell . seto paque(true);

if (row == 0) {

cell . set foreground(headerForeground);

cell . set background(header background);

}否则{

如果(isSelected) {

cell . set foreground(selectedForeground);

cell . set background(selectedBackground);

}否则{

cell.setForeground(前景);

cell.setBackground(背景);

}

}

返回单元格;

}

});

update view();

cPane.add(daysTable,BorderLayout。中心);

}

公共静态字符串getHeader(int index) {

开关(索引){

案例0:

回归周_日;

案例1:

返回WEEK _ MON

案例二:

返程周_ TUE;

案例三:

返回WEEK _ WED

案例4:

返程周_ THU;

案例5:

返回WEEK _ FRI

案例6:

返回WEEK _ SAT

默认值:

返回null

}

}

公共void updateView() {

days model . firetabledatachanged();

day stable . setrowselectioninterval(Calendar . get(Calendar。月的周),

calendar.get(日历。月的周);

day stable . setcolumnselectioninterval(Calendar . get(Calendar。星期几)- 1,

calendar.get(日历。星期几)-1);

}

公共静态类CalendarTable扩展了JTable {

私人日历日历;

公共日历表(TableModel模型,日历日历){

超级(模特);

this.calendar =日历;

}

public void change selection(int row,int column,boolean toggle,boolean extend) {

super.changeSelection(行、列、切换、扩展);

if (row == 0) {

返回;

}

Object obj = getValueAt(row,column);

if (obj!= null) {

calendar.set(日历。DAY_OF_MONTH,((Integer)obj)。int value());

}

}

}

公共静态void main(String[] args) {

JFrame frame = new JFrame(“日历应用”);

frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);

MyCalendar MyCalendar = new MyCalendar();

my calendar . init();

frame.getContentPane()。添加(我的日历);

frame.setSize(240,172);

frame . show();

}

}