您将不得不创建自己的日历组件,以便可以将日期设置为不同的颜色。
这是我为我的一个项目创建的日历。
这MonthPanel
是生成日历的代码。现在,它突出显示了当天。您可以对其进行修改以突出显示您的员工登录的日期。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.util.Calendar;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MonthPanel extends JPanel {
private static final long serialVersionUID = 1L;
protected int month;
protected int year;
protected String[] monthNames = { "January", "February",
"March", "April", "May", "June", "July", "August", "September",
"October", "November", "December" };
protected String[] dayNames = { "S", "M", "T", "W",
"T", "F", "S" };
public MonthPanel(int month, int year) {
this.month = month;
this.year = year;
this.add(createGUI());
}
protected JPanel createGUI() {
JPanel monthPanel = new JPanel(true);
monthPanel.setBorder(BorderFactory
.createLineBorder(SystemColor.activeCaption));
monthPanel.setLayout(new BorderLayout());
monthPanel.setBackground(Color.WHITE);
monthPanel.setForeground(Color.BLACK);
monthPanel.add(createTitleGUI(), BorderLayout.NORTH);
monthPanel.add(createDaysGUI(), BorderLayout.SOUTH);
return monthPanel;
}
protected JPanel createTitleGUI() {
JPanel titlePanel = new JPanel(true);
titlePanel.setBorder(BorderFactory
.createLineBorder(SystemColor.activeCaption));
titlePanel.setLayout(new FlowLayout());
titlePanel.setBackground(Color.WHITE);
JLabel label = new JLabel(monthNames[month] + " " + year);
label.setForeground(SystemColor.activeCaption);
titlePanel.add(label, BorderLayout.CENTER);
return titlePanel;
}
protected JPanel createDaysGUI() {
JPanel dayPanel = new JPanel(true);
dayPanel.setLayout(new GridLayout(0, dayNames.length));
Calendar today = Calendar.getInstance();
int tMonth = today.get(Calendar.MONTH);
int tYear = today.get(Calendar.YEAR);
int tDay = today.get(Calendar.DAY_OF_MONTH);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DAY_OF_MONTH, 1);
Calendar iterator = (Calendar) calendar.clone();
iterator.add(Calendar.DAY_OF_MONTH,
-(iterator.get(Calendar.DAY_OF_WEEK) - 1));
Calendar maximum = (Calendar) calendar.clone();
maximum.add(Calendar.MONTH, +1);
for (int i = 0; i < dayNames.length; i++) {
JPanel dPanel = new JPanel(true);
dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dLabel = new JLabel(dayNames[i]);
dPanel.add(dLabel);
dayPanel.add(dPanel);
}
int count = 0;
int limit = dayNames.length * 6;
while (iterator.getTimeInMillis() < maximum.getTimeInMillis()) {
int lMonth = iterator.get(Calendar.MONTH);
int lYear = iterator.get(Calendar.YEAR);
JPanel dPanel = new JPanel(true);
dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dayLabel = new JLabel();
if ((lMonth == month) && (lYear == year)) {
int lDay = iterator.get(Calendar.DAY_OF_MONTH);
dayLabel.setText(Integer.toString(lDay));
if ((tMonth == month) && (tYear == year) && (tDay == lDay)) {
dPanel.setBackground(Color.ORANGE);
} else {
dPanel.setBackground(Color.WHITE);
}
} else {
dayLabel.setText(" ");
dPanel.setBackground(Color.WHITE);
}
dPanel.add(dayLabel);
dayPanel.add(dPanel);
iterator.add(Calendar.DAY_OF_YEAR, +1);
count++;
}
for (int i = count; i < limit; i++) {
JPanel dPanel = new JPanel(true);
dPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
JLabel dayLabel = new JLabel();
dayLabel.setText(" ");
dPanel.setBackground(Color.WHITE);
dPanel.add(dayLabel);
dayPanel.add(dPanel);
}
return dayPanel;
}
}
这是我用来生成JFrame
显示MonthPanel
.
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class CalendarFrame implements Runnable {
private JFrame frame;
@Override
public void run() {
// Month is zero based
MonthPanel panel = new MonthPanel(5, 2013);
frame = new JFrame();
frame.setTitle("Calendar");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
exitProcedure();
}
});
frame.setLayout(new FlowLayout());
frame.add(panel);
frame.pack();
// frame.setBounds(100, 100, 400, 200);
frame.setVisible(true);
}
public void exitProcedure() {
frame.dispose();
System.exit(0);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new CalendarFrame());
}
}