📄 jmdatepanel.java
字号:
JLabel label = (JLabel)super.getTableCellRendererComponent(arg0, arg1, isSelected, hasFocus, row, col);
label.setHorizontalAlignment(0);
if(row == -1)
{
if(arg1.equals(NAMES_OF_DAYS[0]) || arg1.equals(NAMES_OF_DAYS[6]))
label.setForeground(F_WEEKEND_DAY);
else
label.setForeground(F_NAME_OF_DAY);
label.setBackground(B_NAME_OF_DAY);
label.setHorizontalAlignment(0);
return label;
}
GregorianCalendar cal = (GregorianCalendar)calendarModel.getCalendarClone();
Integer day = (Integer)arg1;
Calendar today = new GregorianCalendar();
int lastDay = cal.getActualMaximum(5);
if(cal.get(5) == day.intValue())
{
if(today.get(5) == day.intValue() && today.get(2) == calendarModel.getCalendar(2) && today.get(1) == calendarModel.getCalendar(1))
{
label.setForeground(F_SELECTED_CURRENT_DAY);
label.setFont(getFont().deriveFont(1));
} else
{
label.setForeground(Color.WHITE);
}
} else
if(day.intValue() < 1 || day.intValue() > lastDay)
{
label.setForeground(Color.LIGHT_GRAY);
if(day.intValue() > lastDay)
{
label.setText(Integer.toString(day.intValue() - lastDay));
} else
{
Calendar lastMonth = new GregorianCalendar();
lastMonth.set(cal.get(1), cal.get(2) - 1, 1);
int lastDayLastMonth = lastMonth.getActualMaximum(5);
label.setText(Integer.toString(lastDayLastMonth + day.intValue()));
}
} else
if(today.get(5) == day.intValue() && today.get(2) == calendarModel.getCalendar(2) && today.get(1) == calendarModel.getCalendar(1))
{
label.setForeground(F_CURRENT_DAY);
label.setFont(getFont().deriveFont(1));
} else
if(isWeekend(day.intValue()))
label.setForeground(F_WEEKEND_DAY);
else
label.setForeground(Color.BLACK);
if(cal.get(5) == day.intValue())
label.setBackground(new Color(10, 36, 106));
else
label.setBackground(Color.WHITE);
return label;
}
private CalendarTableCellRenderer()
{
}
}
public JMDatePanel()
{
dateFormat = 1;
firstDayOfWeek = 2;
initialize();
}
public void setFontSize(float size)
{
Font font = getFont().deriveFont(size);
getMonthLabel().setFont(font);
getTodayLabel().setFont(font);
getYearSpinner().setFont(font);
dayTable.setFont(font);
dayTable.setRowHeight((int)(size * 2.0F));
}
@SuppressWarnings("unchecked")
public void addActionListener(ActionListener arg)
{
getActionListeners().add(arg);
}
@SuppressWarnings("unchecked")
public void addChangeListener(ChangeListener arg)
{
getChangeListeners().add(arg);
}
private void fireActionPerformed()
{
ActionListener al;
for(Iterator i = getActionListeners().iterator(); i.hasNext(); al.actionPerformed(new ActionEvent(this, 1001, "date selected")))
al = (ActionListener)i.next();
}
private ArrayList getActionListeners()
{
if(actionListeners == null)
actionListeners = new ArrayList();
return actionListeners;
}
public Calendar getCalendarClone()
{
return getCalenderModel().getCalendarClone();
}
private GregorianCalendarModel getCalenderModel()
{
if(calendarModel == null)
{
calendarModel = new GregorianCalendarModel();
calendarModel.addChangeListener(eventHandler);
}
return calendarModel;
}
private JPanel getCenterPanel()
{
if(centerPanel == null)
{
centerPanel = new JPanel();
centerPanel.setLayout(new BorderLayout());
centerPanel.setOpaque(false);
centerPanel.add(getDayTableHeader(), "North");
centerPanel.add(getDayTable(), "Center");
}
return centerPanel;
}
private Vector getChangeListeners()
{
if(changeListeners == null)
changeListeners = new Vector();
return changeListeners;
}
private JTable getDayTable()
{
if(dayTable == null)
{
dayTable = new JTable();
dayTable.setAutoResizeMode(4);
dayTable.setPreferredSize(new Dimension(100, 80));
dayTable.setModel(getCalenderModel());
dayTable.setShowGrid(true);
dayTable.setGridColor(Color.WHITE);
dayTable.setSelectionMode(0);
dayTable.setCellSelectionEnabled(true);
dayTable.setRowSelectionAllowed(true);
dayTable.setFocusable(false);
dayTable.addMouseListener(getEventHandler());
TableColumn column = null;
for(int i = 0; i < 7; i++)
{
column = dayTable.getColumnModel().getColumn(i);
column.setPreferredWidth(15);
column.setCellRenderer(getDayTableCellRenderer());
}
}
return dayTable;
}
private CalendarTableCellRenderer getDayTableCellRenderer()
{
if(dayTableCellRenderer == null)
dayTableCellRenderer = new CalendarTableCellRenderer();
return dayTableCellRenderer;
}
private JTableHeader getDayTableHeader()
{
if(dayTableHeader == null)
{
dayTableHeader = getDayTable().getTableHeader();
dayTableHeader.setResizingAllowed(false);
dayTableHeader.setReorderingAllowed(false);
dayTableHeader.setDefaultRenderer(getDayTableCellRenderer());
}
return dayTableHeader;
}
private EventHandler getEventHandler()
{
if(eventHandler == null)
eventHandler = new EventHandler();
return eventHandler;
}
private JLabel getMonthLabel()
{
if(monthLabel == null)
{
monthLabel = new JLabel();
monthLabel.setForeground(SystemColor.activeCaptionText);
monthLabel.setHorizontalAlignment(0);
monthLabel.setText("uninitialised");
monthLabel.addMouseListener(getEventHandler());
getCalenderModel().addMonthLabel(monthLabel);
}
return monthLabel;
}
private JPopupMenu getMonthPopupMenu()
{
if(monthPopupMenu == null)
{
monthPopupMenu = new JPopupMenu();
JMenuItem menuItems[] = getMonthPopupMenuItems();
for(int i = 0; i < menuItems.length; i++)
monthPopupMenu.add(menuItems[i]);
}
return monthPopupMenu;
}
private JMenuItem[] getMonthPopupMenuItems()
{
if(monthPopupMenuItems == null)
{
DateFormatSymbols df = new DateFormatSymbols(DEFAULT_LOCALE);
String months[] = df.getMonths();
monthPopupMenuItems = new JMenuItem[months.length - 1];
for(int i = 0; i < months.length - 1; i++)
{
JMenuItem mi = new JMenuItem(months[i]);
mi.addActionListener(eventHandler);
monthPopupMenuItems[i] = mi;
}
}
return monthPopupMenuItems;
}
private JButton getNextMonthButton()
{
if(nextMonthButton == null)
{
nextMonthButton = new JButton(new JNextIcon(4, 7));
nextMonthButton.setText("");
nextMonthButton.setPreferredSize(new Dimension(20, 15));
nextMonthButton.setBorder(BorderFactory.createBevelBorder(0));
nextMonthButton.setFocusable(false);
nextMonthButton.addActionListener(getEventHandler());
}
return nextMonthButton;
}
private JPanel getNorthCenterPanel()
{
if(northCenterPanel == null)
{
northCenterPanel = new JPanel();
northCenterPanel.setLayout(new BorderLayout());
northCenterPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
northCenterPanel.setOpaque(false);
northCenterPanel.add(getMonthLabel(), "Center");
northCenterPanel.add(getYearSpinner(), "East");
}
return northCenterPanel;
}
private JPanel getNorthPanel()
{
if(northPanel == null)
{
northPanel = new JPanel();
northPanel.setLayout(new BorderLayout());
northPanel.setName("");
northPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
northPanel.setBackground(SystemColor.activeCaption);
northPanel.add(getPreviousMonthButton(), "West");
northPanel.add(getNextMonthButton(), "East");
northPanel.add(getNorthCenterPanel(), "Center");
}
return northPanel;
}
private JButton getPreviousMonthButton()
{
if(previousMonthButton == null)
{
previousMonthButton = new JButton(new JPreviousIcon(4, 7));
previousMonthButton.setText("");
previousMonthButton.setPreferredSize(new Dimension(20, 15));
previousMonthButton.setBorder(BorderFactory.createBevelBorder(0));
previousMonthButton.setFocusable(false);
previousMonthButton.addActionListener(getEventHandler());
}
return previousMonthButton;
}
private JPanel getSouthPanel()
{
if(southPanel == null)
{
southPanel = new JPanel();
southPanel.setLayout(new BorderLayout());
southPanel.setBackground(Color.WHITE);
southPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
southPanel.add(getTodayLabel(), "Center");
}
return southPanel;
}
private JLabel getTodayLabel()
{
if(todayLabel == null)
{
todayLabel = new JLabel();
todayLabel.setHorizontalAlignment(0);
todayLabel.setText("uninitialised");
todayLabel.addMouseListener(getEventHandler());
getCalenderModel().addTodayLabel(todayLabel);
}
return todayLabel;
}
private JSpinner getYearSpinner()
{
if(yearSpinner == null)
{
yearSpinner = new JSpinner();
yearSpinner.setModel(getCalenderModel());
}
return yearSpinner;
}
public void initialize()
{
setLayout(new BorderLayout());
setSize(200, 160);
setPreferredSize(new Dimension(200, 160));
setBackground(SystemColor.activeCaptionText);
setBorder(BorderFactory.createLineBorder(Color.black, 1));
setOpaque(false);
add(getNorthPanel(), "North");
add(getSouthPanel(), "South");
add(getCenterPanel(), "Center");
}
public void removeActionListener(ActionListener arg)
{
getActionListeners().remove(arg);
}
public void removeChangeListener(ChangeListener arg)
{
getChangeListeners().remove(arg);
}
public String toString()
{
DateFormat df = DateFormat.getDateInstance(dateFormat, DEFAULT_LOCALE);
return df.format(getDate());
}
public void setStartDate(Date date)
{
getCalenderModel().setCalendar(date);
}
public void setDateFormat(int format)
{
dateFormat = format;
}
protected boolean isWeekend(int day)
{
Calendar cal = calendarModel.getCalendarClone();
cal.set(5, day);
int dayOfWeek = cal.get(7);
return dayOfWeek == 1 || dayOfWeek == 7;
}
public void setFirstDayOfWeek(int firstDay)
{
firstDayOfWeek = firstDay;
}
public Date getDate()
{
return getCalendarClone().getTime();
}
protected static final Color F_SELECTED_CURRENT_DAY;
protected static final Color F_CURRENT_DAY;
protected static final Color F_WEEKEND_DAY;
protected static final Color F_NAME_OF_DAY;
protected static final Color B_NAME_OF_DAY;
protected static final String TODAY = "Today: ";
protected static final String NAMES_OF_DAYS[] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
protected static final Cursor LABEL_CURSOR = new Cursor(12);
protected static final Locale DEFAULT_LOCALE;
protected int dateFormat;
protected int firstDayOfWeek;
protected ArrayList actionListeners;
protected GregorianCalendarModel calendarModel;
protected JPanel centerPanel;
protected Vector changeListeners;
protected JTable dayTable;
protected CalendarTableCellRenderer dayTableCellRenderer;
protected JTableHeader dayTableHeader;
protected EventHandler eventHandler;
protected JLabel monthLabel;
protected JPopupMenu monthPopupMenu;
protected JMenuItem monthPopupMenuItems[];
protected JButton nextMonthButton;
protected JPanel northCenterPanel;
protected JPanel northPanel;
protected JButton previousMonthButton;
protected JPanel southPanel;
protected JLabel todayLabel;
protected JSpinner yearSpinner;
static Class class$java$lang$Integer; /* synthetic field */
static
{
F_SELECTED_CURRENT_DAY = Color.WHITE;
F_CURRENT_DAY = Color.BLUE;
F_WEEKEND_DAY = Color.RED;
F_NAME_OF_DAY = Color.WHITE;
B_NAME_OF_DAY = Color.GRAY;
DEFAULT_LOCALE = Locale.US;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -