写一个JAVA程序实现一个简单的日历(高分)(加分)
导入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();
}
}