📄 mycalendar.java
字号:
/**
* @(#) MyCalendar.java
* @author fancy
*/
package serial;
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 JDialog
{
String WEEK_SUN = "七";
String WEEK_MON = "一";
String WEEK_TUE = "二";
String WEEK_WED = "三";
String WEEK_THU = "四";
String WEEK_FRI = "五";
String WEEK_SAT = "六";
JPanel cPane;
Object obj;
String obj1;
JLabel yearsLabel;
JSpinner yearsSpinner;
JLabel monthsLabel;
JComboBox monthsComboBox;
JTable daysTable;
AbstractTableModel daysModel;
Calendar calendar;
public void mycalendar(int B1,int B2)
{
setTitle("选择日历"); //设置窗口标题
setSize(200,165); //设置窗口大小
setResizable(false);
setModal(true);
setLocation(B1,B2);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
cPane = (JPanel) getContentPane();
cPane.setLayout(new BorderLayout());
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)));
obj = calendar.get(Calendar.DATE);
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++)
{
if(i<10)
{
monthsComboBox.addItem("0"+new Integer(i));
}
else
{
monthsComboBox.addItem(new Integer(i));
}
}
monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
monthsComboBox.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, 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()
{
public int getRowCount()
{
return 7;
}
public int getColumnCount()
{
return 7;
}
public Object getValueAt(int row, int column)
{
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);
}
}
};
daysTable = new CalendarTable(daysModel, calendar);
daysTable.setShowHorizontalLines(false);
daysTable.setShowVerticalLines(false);
daysTable.setCellSelectionEnabled(true);
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
daysTable.setDefaultRenderer(daysTable.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(Color.white);
cell.setBackground(Color.blue);
}
else
{
if(isSelected)
{
cell.setForeground(Color.white);
cell.setBackground(Color.blue);
}
else
{
cell.setForeground(Color.black);
cell.setBackground(Color.white);
}
}
return cell;
}
});
updateView();
cPane.add(daysTable, BorderLayout.CENTER);
setVisible(true);
}
public 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);
}
public 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;
}
obj = getValueAt(row, column);
obj1 = ""+obj;
if(obj1.length()<2)
{
obj1 = "0"+obj1;
}
if (obj != null)
{
dispose();
}
}
}
public String FanHui()
{
return yearsSpinner.getValue()+"/"+monthsComboBox.getSelectedItem()+"/"+obj1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -