📄 jmdatepanel.java
字号:
package jm.framework.gui.module;
import java.awt.*;
import java.awt.event.*;
import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
/**
* <p>Title: JM</p>
*
* <p>Copyright: Copyright (c) 2004-2006</p>
*
* <p>Company: 1SHome</p>
*
* <p>@author Spook</p>
*
* @version 1.2.5.2
* @see JDK 1.5.0.6
*/
public class JMDatePanel extends JPanel
{
protected class JPreviousIcon
implements Icon
{
public int getIconWidth()
{
return width;
}
public int getIconHeight()
{
return height;
}
public void setDimension(int width, int height)
{
this.width = width;
this.height = height;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
xPoints[0] = x;
yPoints[0] = y + height / 2;
xPoints[1] = x + width;
yPoints[1] = y - 1;
xPoints[2] = x + width;
yPoints[2] = y + height;
g.setColor(Color.BLACK);
g.fillPolygon(xPoints, yPoints, 3);
}
protected int width;
protected int height;
protected int xPoints[];
protected int yPoints[];
public JPreviousIcon(int width, int height)
{
xPoints = new int[3];
yPoints = new int[3];
setDimension(width, height);
}
}
protected class JNextIcon
implements Icon
{
public int getIconWidth()
{
return width;
}
public int getIconHeight()
{
return height;
}
public void setDimension(int width, int height)
{
this.width = width;
this.height = height;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
xPoints[0] = x + width;
yPoints[0] = y + height / 2;
xPoints[1] = x;
yPoints[1] = y - 1;
xPoints[2] = x;
yPoints[2] = y + height;
g.setColor(Color.BLACK);
g.fillPolygon(xPoints, yPoints, 3);
}
protected int width;
protected int height;
protected int xPoints[];
protected int yPoints[];
public JNextIcon(int width, int height)
{
xPoints = new int[3];
yPoints = new int[3];
setDimension(width, height);
}
}
private class GregorianCalendarModel
implements TableModel, SpinnerModel
{
@SuppressWarnings("unchecked")
public void addChangeListener(ChangeListener arg0)
{
changeListeners.add(arg0);
}
@SuppressWarnings("unchecked")
public void addMonthLabel(JLabel label)
{
monthLabels.add(label);
fireMonthTextFieldsUpdate();
}
@SuppressWarnings("unchecked")
public void addTableModelListener(TableModelListener arg0)
{
tableModelListeners.add(arg0);
}
public void addTodayLabel(JLabel label)
{
DateFormat df1 = DateFormat.getDateInstance(dateFormat, DEFAULT_LOCALE);
label.setText("Today: " + df1.format(new Date()));
}
private void fireCalendarChanged()
{
ChangeListener cl;
for(Iterator i = changeListeners.iterator(); i.hasNext(); cl.stateChanged(new ChangeEvent(this)))
cl = (ChangeListener)i.next();
}
public void fireCalendarInvalidated()
{
fireCalendarChanged();
fireTableModelEvent();
fireMonthTextFieldsUpdate();
}
private void fireMonthTextFieldsUpdate()
{
JLabel label;
DateFormatSymbols df;
for(Iterator i = monthLabels.iterator(); i.hasNext(); label.setText(df.getMonths()[calendar.get(2)]))
{
label = (JLabel)i.next();
df = new DateFormatSymbols(DEFAULT_LOCALE);
}
}
private void fireTableModelEvent()
{
TableModelListener tl;
for(Iterator i = tableModelListeners.iterator(); i.hasNext(); tl.tableChanged(new TableModelEvent(this)))
tl = (TableModelListener)i.next();
}
public int getCalendar(int field)
{
return calendar.get(field);
}
public Calendar getCalendarClone()
{
return (Calendar)calendar.clone();
}
@SuppressWarnings("unchecked")
public Class getColumnClass(int arg0)
{
return class$java$lang$Integer != null ? class$java$lang$Integer : new Integer("0").getClass();
}
public int getColumnCount()
{
return 7;
}
public String getColumnName(int colIndex)
{
int index = colIndex + firstDayOfWeek;
if(index > 7)
index = 1;
String name;
switch(index)
{
case 1: // '\001'
name = NAMES_OF_DAYS[0];
break;
case 2: // '\002'
name = NAMES_OF_DAYS[1];
break;
case 3: // '\003'
name = NAMES_OF_DAYS[2];
break;
case 4: // '\004'
name = NAMES_OF_DAYS[3];
break;
case 5: // '\005'
name = NAMES_OF_DAYS[4];
break;
case 6: // '\006'
name = NAMES_OF_DAYS[5];
break;
case 7: // '\007'
name = NAMES_OF_DAYS[6];
break;
default:
name = "";
break;
}
return name;
}
public Object getNextValue()
{
return Integer.toString(getCalendar(1) + 1);
}
public Object getPreviousValue()
{
return Integer.toString(getCalendar(1) - 1);
}
public int getRowCount()
{
return 6;
}
public Object getValue()
{
return Integer.toString(getCalendar(1));
}
public Object getValueAt(int row, int col)
{
Calendar firstDayOfMonth = (Calendar)calendar.clone();
firstDayOfMonth.set(5, 1);
int DOW = firstDayOfMonth.get(7);
int value = (col - DOW) + row * 7 + (firstDayOfWeek + 1);
return new Integer(value);
}
public boolean isCellEditable(int arg0, int arg1)
{
return false;
}
public void removeChangeListener(ChangeListener arg0)
{
changeListeners.remove(arg0);
}
public void removeMonthLabel(JLabel label)
{
monthLabels.remove(label);
}
public void removeTableModelListener(TableModelListener arg0)
{
tableModelListeners.remove(arg0);
}
public void setCalendar(Date date)
{
calendar.setTime(date);
fireCalendarInvalidated();
}
public void setCalendar(int field, int value)
{
calendar.set(field, value);
fireCalendarInvalidated();
}
public void setCalendar(int year, int month, int date)
{
calendar.set(year, month, date);
fireCalendarInvalidated();
}
public void setValue(Object arg0)
{
int year = Integer.parseInt((String)arg0);
setCalendar(1, year);
}
public void setValueAt(Object obj, int i, int j)
{
}
private GregorianCalendar calendar;
private ArrayList changeListeners;
private ArrayList monthLabels;
private ArrayList tableModelListeners;
public GregorianCalendarModel()
{
calendar = (GregorianCalendar)GregorianCalendar.getInstance(DEFAULT_LOCALE);
calendar.setFirstDayOfWeek(firstDayOfWeek);
changeListeners = new ArrayList();
tableModelListeners = new ArrayList();
monthLabels = new ArrayList();
}
}
private class EventHandler
implements ActionListener, MouseListener, ChangeListener
{
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource().equals(nextMonthButton))
{
GregorianCalendar cal = (GregorianCalendar)calendarModel.getCalendarClone();
int day = cal.get(5);
cal.set(cal.get(1), cal.get(2) + 1, 1);
if(day > cal.getActualMaximum(5))
cal.set(5, cal.getActualMaximum(5));
else
cal.set(5, day);
calendarModel.setCalendar(cal.getTime());
} else
if(arg0.getSource().equals(previousMonthButton))
{
GregorianCalendar cal = (GregorianCalendar)calendarModel.getCalendarClone();
int day = cal.get(5);
cal.set(cal.get(1), cal.get(2) - 1, 1);
if(day > cal.getActualMaximum(5))
cal.set(5, cal.getActualMaximum(5));
else
cal.set(5, day);
calendarModel.setCalendar(cal.getTime());
} else
{
for(int month = 0; month < monthPopupMenuItems.length; month++)
{
if(!arg0.getSource().equals(monthPopupMenuItems[month]))
continue;
GregorianCalendar cal = (GregorianCalendar)calendarModel.getCalendarClone();
int day = cal.get(5);
cal.set(cal.get(1), month, 1);
if(day > cal.getActualMaximum(5))
cal.set(5, cal.getActualMaximum(5));
else
cal.set(5, day);
calendarModel.setCalendar(cal.getTime());
}
}
}
public void mouseClicked(MouseEvent arg0)
{
if(arg0.getSource().equals(monthLabel))
{
getMonthPopupMenu().setLightWeightPopupEnabled(false);
monthPopupMenu.show((Component)arg0.getSource(), arg0.getX(), arg0.getY());
} else
if(arg0.getSource().equals(todayLabel))
calendarModel.setCalendar(new Date());
else
if(arg0.getSource().equals(dayTable))
{
int row = dayTable.getSelectedRow();
int col = dayTable.getSelectedColumn();
if(row >= 0 && row <= 5)
{
Integer date = (Integer)calendarModel.getValueAt(row, col);
calendarModel.setCalendar(5, date.intValue());
fireActionPerformed();
}
}
}
public void mouseEntered(MouseEvent mouseevent)
{
}
public void mouseExited(MouseEvent mouseevent)
{
}
public void mousePressed(MouseEvent mouseevent)
{
}
public void mouseReleased(MouseEvent mouseevent)
{
}
public void stateChanged(ChangeEvent arg0)
{
if(arg0.getSource().equals(calendarModel))
{
ChangeListener cl;
for(Iterator i = getChangeListeners().iterator(); i.hasNext(); cl.stateChanged(new ChangeEvent(this)))
cl = (ChangeListener)i.next();
}
}
private EventHandler()
{
}
}
private class CalendarTableCellRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean isSelected, boolean hasFocus, int row, int col)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -